Linux Kernel 4.20 hat PSI hinzugefügt , was für "Pressure Stall Information" steht. Sie erhalten mehr Einblicke, warum eine Maschine überlastet ist. Und welche Ressource ist der Engpass.
Es gibt drei neue Dateien unter /proc/pressure:
/proc/pressure/cpu
/proc/pressure/memory
/proc/pressure/io
Um aus Tracking-Informationen zum Druckstillstand zu zitieren /proc/pressure/memory:
Die Ausgabe sieht aus wie:
some avg10=70.24 avg60=68.52 avg300=69.91 total=3559632828
full avg10=57.59 avg60=58.06 avg300=60.38 total=3300487258
Die someZeile ähnelt den CPU-Informationen: Sie gibt den Prozentsatz der Zeit an, in der mindestens ein Prozess ausgeführt werden könnte, wenn nicht auf Speicherressourcen gewartet würde. Auf diese Weise wird insbesondere die Zeit erfasst, die für das Einlagern, das Zurücksetzen von Seiten aus dem Seitencache und das Durchführen einer direkten Rückforderung aufgewendet wurde. Es ist daher ein guter Indikator dafür, wann das System aufgrund von Speichermangel überlastet ist.
Die fullZeile ist etwas anders: Sie zeichnet die Zeit auf, zu der aufgrund des Speicherdrucks niemand die CPU für die eigentliche Arbeit verwenden kann. Wenn alle Prozesse auf Paging-E / A warten, sieht die CPU möglicherweise inaktiv aus, dies liegt jedoch nicht an mangelnder Arbeit. Wenn diese Prozesse eine Speicherwiederherstellung durchführen, ist das Endergebnis nahezu dasselbe. Die CPU ist ausgelastet, erledigt aber nicht die Arbeit, für die der Computer da ist. Wenn die fullZahlen weit über Null liegen, fehlt dem System eindeutig der Speicher, den es zur Unterstützung der aktuellen Arbeitslast benötigt.
Ich habe noch keinen Zugriff auf einen Produktionsserver mit Linux 4.20, aber hier ist ein kleines Experiment auf meinem Desktop (für das kein Swap konfiguriert ist). Anfangs habe ich überhaupt keinen Speicherdruck (alle Zähler sind 0):
$ cat /proc/pressure/memory
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
Dann habe ich die Speichernutzung erhöht, bis mir schließlich der Speicher ausgegangen ist, wodurch die Maschine eingefroren wurde, bis das OOM einige Prozesse beendet hat. Bevor es gefroren ist, hat sich der Druck auf das Gedächtnis erhöht:
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
some avg10=0.00 avg60=0.00 avg300=0.00 total=47047
full avg10=0.00 avg60=0.00 avg300=0.00 total=32839
some avg10=0.00 avg60=0.00 avg300=0.00 total=116425
full avg10=0.00 avg60=0.00 avg300=0.00 total=81497
some avg10=1.26 avg60=0.22 avg300=0.04 total=183863
full avg10=0.72 avg60=0.13 avg300=0.02 total=127684
Nachdem sich das System erholt hat, ist der Speicherdruck wieder 0 und die totalZähler steigen nicht mehr an:
$ cat /proc/pressure/memory
some avg10=0.00 avg60=0.00 avg300=0.07 total=53910568
full avg10=0.00 avg60=0.00 avg300=0.02 total=27766222
...
$ cat /proc/pressure/memory
some avg10=0.00 avg60=0.00 avg300=0.05 total=53910568
full avg10=0.00 avg60=0.00 avg300=0.00 total=27766222
/proc/meminfound/proc/vmstat) zu ermitteln: stackoverflow.com/a/3031924