
Ich führe einige Programme auf *nix in einem Container aus und versuche, die Menge an RAM, die mein Prozess verwendet, genau zu berechnen. Meines Wissens nach sollte diese Information unter liegen . Ich habe versucht, alle PSS aller Dateien auf einem System mithilfe dieses Ruby-Skripts /proc/#{pid}/smaps
zu summieren :smaps
https://gist.github.com/schneems/10025798
Ich sehe jedoch, dass die Speichernutzung niedriger gemeldet wird, als mein Container meldet. Wenn ich auf RSS umstelle, wird der Wert viel höher (weit über dem, was mein Container meldet). Ich bin ziemlich sicher, dass alle benötigten Informationen in verfügbar sind /proc
, ich weiß nur nicht, wie sie gemeldet werden, um eine genaue Messung zu erhalten. Meine Frage ist folgende: Welche Werte in smaps
sollte ich summieren, da PSS allein kein guter Indikator ist? Gibt es eine bessere oder genauere Möglichkeit, diese Informationen innerhalb einer Linux-Maschine abzurufen?
Antwort1
RSS ist die Resident Set Size, also der globale Speicher, der von einem Prozess verwendet wird, einschließlich aller zur Laufzeit geladenen Bibliotheken. Eine einzelne Bibliothek kann mehrmals verwendet werden (denken Sie beispielsweise an die Forks von Apache-Prozessen, bei denen jeder Unterprozess dieselben Bibliotheken verwenden kann). Gemäß dem virtuellen Speichermodell betrachtet jeder Prozess diesen Speicher als von ihm selbst verwendet. In Wirklichkeit ordnet der Kernel die virtuellen Speicheradressen der eindeutigen Speicheradresse der Bibliothek zu.
PSS hingegen summiert jede USS (Unshared Set Size) für einen Prozess. Stellen Sie sich das als den Speicher vor, den ein Prozess sofort freigeben würde, wenn wir ihn beenden. Dabei wird der gemeinsam genutzte Speicher nicht berücksichtigt, sondern nur der Speicher, den der Prozess ausschließlich verwenden darf.
Infolgedessen überschätzt der RSS-Wert den effektiv genutzten Speicher. Der PSS ist genauer, wenn Sie sicherstellen, dass die Speichergröße der geladenen Bibliotheken berücksichtigt wird.
Mehr DetailsHier, besonders im letzten Absatz.