Wie kann der Speicher ohne Copy-on-Write-Seiten gemessen werden?
8
Wie kann der gesamte RSS-Speicher gemessen werden, der von einer Reihe von (gegabelten) Prozessen belegt wird, ohne gemeinsam genutzte Seiten und Seiten, die beim Schreiben kopiert werden, doppelt zu zählen?
Sehr interessante Frage, +1 - es sollte durch eine eingehendere Analyse der /proc/*/mapDateien möglich sein, obwohl ich nie ein Tool gefunden habe, das das könnte. Das Hauptproblem besteht darin, dass die zu verfolgenden Datenstrukturen viel komplexer sind, als es scheint. Wenn Sie hier keine nette Antwort erhalten, können Sie vielleicht auch Unix SE ausprobieren.
Ich habe es initzum Testen gegen (pid 1) ausgeführt und die gemeldete Summe entspricht in etwa der physischen RAM-Nutzung (gemäß htop), also denke ich, dass es etwas korrekt ist.
In keinem mir bekannten Tool gibt es eine klar definierte Methode, um festzustellen, welche Prozesse welche Zuordnungen gemeinsam nutzen, ohne alle Zuordnungen zu durchlaufen und Adressen zu vergleichen.
Linux bietet jedoch eine vernünftige Schätzung, die als Proportional-Set-Größe bezeichnet wird . Dies wird in / proc / [pid]> / maps gemeldet.
Dieser Wert ist die Größe der Zuordnung geteilt durch die Anzahl der Geschwister / übergeordneten Prozesse mit derselben geöffneten Zuordnung.
Bei einem Programm mit einer offenen 1-MB-Zuordnung und einer 1-MB-Zuordnung, die mit 4 anderen Prozessen gemeinsam genutzt wird, beträgt die proportionale Satzgröße 1 MB + (1 MB / 4) oder 1,250 MiB. Das RSS in diesem Fall wäre 2MiB.
Es gibt einen Patch für htop, der mithilfe der PSS eine "gute Schätzung" des tatsächlich verwendeten Speichers berechnet.
/proc/*/map
Dateien möglich sein, obwohl ich nie ein Tool gefunden habe, das das könnte. Das Hauptproblem besteht darin, dass die zu verfolgenden Datenstrukturen viel komplexer sind, als es scheint. Wenn Sie hier keine nette Antwort erhalten, können Sie vielleicht auch Unix SE ausprobieren.Antworten:
Am Ende habe ich mein eigenes Dienstprogramm dafür geschrieben: https://gist.github.com/Eugeny/04ccfe8accf4bc74b0ca
Ich habe es
init
zum Testen gegen (pid 1) ausgeführt und die gemeldete Summe entspricht in etwa der physischen RAM-Nutzung (gemäß htop), also denke ich, dass es etwas korrekt ist.Anwendungsbeispiel:
quelle
In keinem mir bekannten Tool gibt es eine klar definierte Methode, um festzustellen, welche Prozesse welche Zuordnungen gemeinsam nutzen, ohne alle Zuordnungen zu durchlaufen und Adressen zu vergleichen.
Linux bietet jedoch eine vernünftige Schätzung, die als Proportional-Set-Größe bezeichnet wird . Dies wird in / proc / [pid]> / maps gemeldet.
Dieser Wert ist die Größe der Zuordnung geteilt durch die Anzahl der Geschwister / übergeordneten Prozesse mit derselben geöffneten Zuordnung.
Bei einem Programm mit einer offenen 1-MB-Zuordnung und einer 1-MB-Zuordnung, die mit 4 anderen Prozessen gemeinsam genutzt wird, beträgt die proportionale Satzgröße 1 MB + (1 MB / 4) oder 1,250 MiB. Das RSS in diesem Fall wäre 2MiB.
Es gibt einen Patch für htop, der mithilfe der PSS eine "gute Schätzung" des tatsächlich verwendeten Speichers berechnet.
quelle