Für einen bestimmten Prozess in /proc/<pid>/smaps
, was für einen gegebenen Mapping-Eintrag:
- Shared_Clean
- Shared_Dirty
- Private_Clean
- Private_Dirty
Ist Shared_Clean
+ Shared_Dirty
die Menge an Speicher, die mit anderen Prozessen geteilt wird? Es ist also wie Shared RSS?
Ähnlich verhält es sich mit Private_Clean
+ Private_Dirty
die Menge an Speicher, die nur für einen Prozess verfügbar ist ? Es ist also wie privates RSS?
Ist der PSS-Wert =PrivateRSS + (SharedRSS / Anzahl der Prozesse, die es teilen)?
Einige weitere Fragen nach dem Lesen dieses Links:LWN
Lassen Sie uns nun über den gesamten Prozess sprechen, dessen Smaps-Eintrag wir uns ansehen.
Mir ist aufgefallen, dass wenn ich Shared_Clean
mache + Shared_Dirty
+ Private_Clean
+ Private_Dirty
für jeden smaps-Eintrag für den Prozess erhalte ich den RSS des Prozesses, wie
von ps
gemeldet , was ziemlich cool ist. Zum Beispiel
ps -p $$ -o pid,rss
Gibt mir den (ungefähr) gleichen Wert für rss wie die Summe von jedem Shared_Clean
, Shared_Dirty
, Private_Clean
, Private_Dirty
Eintrag in /proc/$$/smaps.
Aber was ist mit PSS für den gesamten Prozess? Also, wie erhalte ich aus dem obigen Beispiel die PSS für $$ ? Kann ich einfach den PSS-Eintrag für jede Smaps-Zuordnung hinzufügen und bei PSS für $$ ankommen?
Und was ist mit USS für den gesamten Prozess? Wenn ich wieder das obige Beispiel nehme, schätze ich, dass ich bei der USS für $$ ankommen kann, indem ich nur die Private_*-Einträge für jeden smaps-Eintrag für $$ zusammenfasse..richtig?
Hinweise:
PSS=proportionale Satzgröße.
USS=eindeutige Satzgröße.
Akzeptierte Antwort:
Saubere Seiten sind Seiten, die seit ihrer Zuordnung nicht geändert wurden (normalerweise werden Textabschnitte aus gemeinsam genutzten Bibliotheken nur von der Festplatte gelesen (falls erforderlich), nie geändert, sodass sie sich in gemeinsam genutzten, sauberen Seiten befinden).
Schmutzige Seiten sind Seiten, die nicht sauber sind (d. h. modifiziert wurden).
Private Seiten stehen nur diesem Prozess zur Verfügung, freigegebene Seiten werden von anderen Prozessen abgebildet.
RSS ist die Gesamtzahl der Seiten, geteilt oder nicht, die derzeit dem Prozess zugeordnet sind. Also Shared_Clean
+ Shared_Dirty
wäre der gemeinsam genutzte Teil des RSS (d. h. der Teil des RSS, der auch in andere Prozesse abgebildet wird) und Private_Clean
+ Private_Dirty
der private Teil von RSS (d.h. nur in diesem Prozess abgebildet).
PSS (Proportional Share Size) ist so, wie Sie es beschreiben. Private Seiten werden unverändert summiert, und die Größe jeder gemeinsam genutzten Zuordnung wird durch die Anzahl der Prozesse geteilt, die sie gemeinsam nutzen.
Wenn also ein Prozess 100.000 private Seiten hat, werden 500.000 Seiten mit einem anderen Prozess geteilt und 500.000 mit vier geteilt anderen Prozessen wäre das PSS:
100k + (500k / 2) + (500k / 5) = 450k
Weiterführende Literatur:
- ELC:Wie viel Speicher verwenden Anwendungen wirklich?
Documentation/filesystems/proc.txt
in den Kernelquellenman proc(5)
- Übersicht über die Linux-Speicherverwaltung
- Speicherverwaltung auf TLDP.org
- LinuxMM
Zu prozessweiten Summen:
-
RSS
kann (ungefähr) durch Summieren vonRss:
erhalten werden Einträge insmaps
(Sie müssen die freigegebenen/privaten freigegebenen/dirty Einträge nicht addieren).awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
- Sie können
Pss:
zusammenfassen Werte auf die gleiche Weise, um prozessglobalesPSS
zu erhalten . USS
wird nicht insmaps
gemeldet , aber es ist tatsächlich die Summe privater Mappings, also können Sie es auch auf die gleiche Weise erhalten
Beachten Sie, dass eine "teilbare" Seite als private Zuordnung gezählt wird, bis sie tatsächlich ist geteilt. d.h. wenn es nur einen Prozess gibt, der derzeit libfoo
verwendet , erscheint der Textabschnitt dieser Bibliothek im private des Prozesses Zuordnungen. Es wird nur dann in den gemeinsam genutzten Zuordnungen berücksichtigt (und aus den privaten entfernt), wenn/wenn ein anderer Prozess beginnt, diese Bibliothek zu verwenden.
Die Werte stimmen nicht bei allen Prozessen genau überein. Ich bin mir nicht ganz sicher, warum… Entschuldigung.