Administrez un server Debian Linux x86_64 cu 125 GB RAM, o partiție de swap de 10 GB și o valoare de swappiness de 60.
A gratuit -gw
imprimări de ieșire:
cache-ul total folosit gratuit de buffere partajate disponibil
Mem: 125 20 1 25 0 103 78
Schimbă: 9 1 7
În fiecare noapte, rulează o lucrare cron care necesită foarte mult disc R/W și crește memoria utilizată cu 2 GB în timpul execuției sale înainte de a reveni la ~20 GB.
În același interval de timp, anumite procese Python containerizate de lungă durată (în special gunicorn) sunt paginate.
Cu timpul, aceste procese vor umple treptat schimbul - după câteva săptămâni, acesta va fi plin în proporție de 99%.
Pot șterge schimbarea fie repornind procesele, fie dezactivând și reactivând cu swapoff
și swapon
. Dar utilizarea de schimb a proceselor Python va crește lent din nou.
Bănuiesc că acea parte a explicației ar putea fi aceea că, din cauza jobului cron nocturn, Kernel-ul acordă prioritate cache-ului sistemului de fișiere mai mare decât proceselor Python. Dar, de asemenea, presupun că unele erori de software în gestionarea memoriei acelor procese Python ar putea fi de vină.
Un prieten mi-a sugerat să cumpăr și mai multă memorie RAM, astfel încât să fie mai mult spațiu pentru memoria cache a sistemului de fișiere. Asta mi se pare excesiv. Aș dori să diagnosticez mai precis cauza schimbului și să găsesc o soluție software la problemă.
Așa că acum îi trec întrebarea lui Serverfault - ce părere aveți despre acest fenomen și unde ar trebui să merg de aici?