Warum unterscheidet sich der Wert von VSIZE oben vom Wert von VSZ (Virtual Set Size) in ps?

9

Ich weiß, dass VSZ in psfür den gesamten Adressraum bestimmt ist, der für die App zugewiesen wurde, und manchmal als vsize (in der Manpage von psLinux erwähnt) aliasiert wird , aber wie lautet die Definition von VSIZE in top? Diese Top-Ausgabe vom iPhone unterscheidet sich von der Top-Ausgabe unter Linux:

 PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS  RPRVT  RSHRD  RSIZE  VSIZE
 1875 emma         0.0%  0:30.83   7   139    932 17868K  5328K    29M   181M

root# ps -eo pid,rss,vsz|grep 1875
 1875  29324   441324
Ralph Wen
quelle
Ich kann dies auf keiner meiner Darwin-Maschinen reproduzieren. Es lässt mich denken, dass die Shell, die sie auf dem iPhone eingerichtet haben, eine seltsame Blockgröße hatte?
Polynom
Sie scheinen RSIZE / rss auf die gleiche Weise zu berechnen, aber ps meldet einen vsz, der 2,5x größer ist als der von top. vielleicht topauf IOS schließt nicht gemeinsam genutzte Objekte in vsize, oder so etwas.
Tim Kennedy
"Diese Top-Ausgabe des iPhone unterscheidet sich von der Top-Ausgabe unter Linux" - keine Überraschung, oder?
Poige

Antworten:

5

Das Linux-Speichersystem ist mit vielen Routinen von Dienstprogrammen zur Speicheroptimierung und Speicherfreigabe gefüllt, die die Vorstellung, wie Speicher gemeinsam genutzt und verbraucht wird, zu einem umständlichen Ansatz machen. Die Ausgabe von ps und anderen ps-bezogenen Befehlen verarbeitet alle ihre Datenausgabe unter /procDateisystem. Insbesondereps, RSS (Resident Size Memory) und VSIZE (Virtual Memory Size) sind beide wichtig, jedoch zeigt VSIZE nicht die genaue Nutzung des Speichers an und der Unterschied zwischen VSIZE und RSS ist das, was während der Initialisierung tatsächlich beabsichtigt und dem Programm zugewiesen wird darf noch nicht referenziert werden. Wie das Programm kann viele Bibliotheken verknüpft sein, aber sie sind noch nicht geladen, da sie in der tatsächlichen Programmlaufzeit noch nicht referenziert sind. RSS gibt den gesamten vom Programm tatsächlich verwendeten Speicher an, liefert jedoch möglicherweise kein genaues Bild des Speicherverbrauchs, da der größte Teil des zugewiesenen Speichers mit anderen Instanzen desselben Prozesses oder anderen Prozessen geteilt werden kann. Ein Blick nach unten /proc/<processid>/mapskann eine ungefähre Vorstellung davon geben, wie der Speicher verwendet wurde, aber sie können manchmal irreführend sein. Benutzenpmap -x <pid> Von der Kommandozeile aus ist es nützlich, die Ausbreitung zu sehen.

Die oft besseren Dienstprogramme sind freeund vmstat. freeSie erhalten Informationen zum aktuellen Speicherverbrauch und vmstat kann verwendet werden, um zu sehen, wie oft es aktualisiert wird.

Nikhil Mulley
quelle
Ein weiterer Grund oder eine nachdenkliche Erklärung, warum ps NICHT als korrekte Nutzung des Prozessspeichers angesehen werden sollte. Lesen Sie dies auf virtualthreads.blogspot.com/2006/02/…
Nikhil Mulley
2
Das Plakat dieser Antwort versucht zu sagen, dass die Definition des verwendeten Gedächtnisses komplex und vielfältig ist. Es gibt keinen einzigen Ort im Kernel, an dem er verfolgt und gemeldet wird. Die Dienstprogramme interpretieren die zahlreichen Statistiken, die vom Kernel gemeldet werden, selbst.
Johan