GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Benötigen Sie eine Erklärung zur Größe des residenten Satzes/virtuellen Größe?

Ich habe diesen pidstat gefunden wäre ein gutes Werkzeug, um Prozesse zu überwachen. Ich möchte die durchschnittliche Speichernutzung eines bestimmten Prozesses berechnen. Hier ist eine Beispielausgabe:

02:34:36 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:34:37 PM      7276      2.00      0.00  349212 210176   7.14  scalpel

(Dies ist Teil der Ausgabe von pidstat -r -p 7276 .)

Sollte ich die Informationen zur Resident Set Size (RSS) oder Virtual Size (VSZ) verwenden, um den durchschnittlichen Speicherverbrauch zu berechnen? Ich habe ein paar Dinge auf Wikipedia und in Foren gelesen, bin mir aber nicht sicher, ob ich die Unterschiede vollständig verstehe. Außerdem scheint keiner von ihnen zuverlässig zu sein. Wie kann ich also einen Prozess überwachen, um seine Speichernutzung zu ermitteln?

Jede Hilfe in dieser Angelegenheit wäre hilfreich.

Akzeptierte Antwort:

RSS gibt an, wie viel Speicher dieser Prozess derzeit im Hauptspeicher (RAM) hat. VSZ gibt an, wie viel virtuellen Speicher der Prozess insgesamt hat. Dies umfasst alle Arten von Speicher, sowohl im RAM als auch ausgelagert. Diese Zahlen können verzerrt werden, da sie auch gemeinsam genutzte Bibliotheken und andere Arten von Speicher enthalten. Sie können fünfhundert Instanzen von bash haben laufen, und die Gesamtgröße ihres Speicherbedarfs ist nicht die Summe ihrer RSS- oder VSZ-Werte.

Wenn Sie eine detailliertere Vorstellung vom Speicherbedarf eines Prozesses erhalten möchten, stehen Ihnen einige Optionen zur Verfügung. Sie können durch /proc/$PID/map gehen und sortiere die Sachen aus, die du nicht magst. Wenn es sich um gemeinsam genutzte Bibliotheken handelt, kann die Berechnung abhängig von Ihren Anforderungen komplex werden (an die ich mich zu erinnern glaube).

Wenn Sie sich nur für die Heap-Größe des Prozesses interessieren, können Sie immer nur den [heap] parsen Eintrag in der map Datei. Die Größe, die der Kernel für den Prozess-Heap zugewiesen hat, kann die genaue Anzahl der Bytes widerspiegeln, die der Prozess gefragt hat, muss es aber nicht zuzuordnen. Es gibt winzige Details, Kernel-Interna und Optimierungen, die dies stören können. In einer idealen Welt ist es so viel, wie Ihr Prozess benötigt, aufgerundet auf das nächste Vielfache der Systemseitengröße (getconf PAGESIZE wird Ihnen sagen, was es ist – auf PCs sind es wahrscheinlich 4.096 Bytes).

Wenn Sie sehen möchten, wie viel Speicher ein Prozess zugewiesen hat , ist eine der besten Möglichkeiten, auf die Kernel-seitigen Metriken zu verzichten. Stattdessen instrumentieren Sie die Heap-Speicher-(De-)Allokationsfunktionen der C-Bibliothek mit LD_PRELOAD Mechanismus. Ich persönlich missbrauche valgrind leicht um Informationen über diese Art von Dingen zu erhalten. (Beachten Sie, dass das Anwenden der Instrumentierung einen Neustart des Prozesses erfordert.)

Verwandte:Linux – Ich habe versehentlich den /root-Ordner gelöscht und jetzt ist die Shell-Zeichenfolge anders. Was gibt?

Bitte beachten Sie, da Sie möglicherweise auch Benchmarking-Laufzeiten durchführen, dass valgrind wird Ihre Programme etwas langsamer machen (aber wahrscheinlich innerhalb Ihrer Toleranzen).


Linux
  1. Linux-Befehle:Durchsuchen des virtuellen Speichers mit vmstat

  2. Ändern der Größe eines Fensters auf eine festgelegte Größe in Linux

  3. Maximale Anzahl von Threads pro Prozess in Linux?

  4. Protokollieren der RAM-Speicherobergrenze eines Linux-Prozesses

  5. Wenn sich ein Prozess verzweigt, wird sein virtueller oder residenter Speicher kopiert?

Swapiness unter Linux:Alles, was Sie wissen müssen

So erweitern Sie die Festplattengröße der virtuellen KVM-Maschine unter Linux

Finden Sie die RAM-Größe in Linux

Benötigen Sie eine Erklärung zur Resident Set-Größe/virtuellen Größe

Begrenzen Sie die Speichernutzung für einen einzelnen Linux-Prozess

Wie wird die Speichernutzung in Linux gemeldet?