Wie viel RAM verwendet diese Anwendung?

10

Wenn ich Prozesse mit ihrem Speicherverbrauch starte top -coder htoperhalte, ist dies nicht das, was ich sehen möchte.

Gibt es eine Befehlszeile, mit der der RAM-Verbrauch einer bestimmten Anwendung angezeigt werden kann?

Zum Beispiel möchte ich den RAM-Verbrauch des Apache-Webservers sehen (nicht indem ich stattdessen alle Prozesse überprüfe, die er ausführt).


quelle
1
Schauen Sie sich diese stackoverflow.com/questions/131303/…
TuKsn
Vielen Dank. Das Beste, was ich darin finden kann, ist ein Speicherverbrauch pro Prozess, was mir top -c bereits gibt

Antworten:

4

Hier finden Sie eine sehr gute ausführliche Erklärung: https://blogs.kde.org/2005/09/15/measuring-memory-usage

Aber im Wesentlichen: Sie müssen wirklich verstehen, wie die Anwendung eingerichtet ist.

Schauen Sie sich zum Beispiel MySQL an:

  PID  PPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                    
 6004 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:40.33 mysqld                                                                                                                                            
16115 16085 composit  20   0 37900  27m 2908 S    0  0.2   0:00.37 mysqld                                                                                                                                            
16116 16115 composit  20   0 37900  27m 2908 S    0  0.2   2:07.34 mysqld                                                                                                                                            
16117 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld                                                                                                                                            
16118 16116 composit  20   0 37900  27m 2908 S    0  0.2   3:19.79 mysqld                                                                                                                                            
16119 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.01 mysqld                                                                                                                                            
16120 16116 composit  20   0 37900  27m 2908 S    0  0.2   5:31.09 mysqld                                                                                                                                            
16121 16116 composit  20   0 37900  27m 2908 S    0  0.2  14:19.53 mysqld                                                                                                                                            
16122 16116 composit  20   0 37900  27m 2908 S    0  0.2  36:13.67 mysqld                                                                                                                                            
16123 16116 composit  20   0 37900  27m 2908 S    0  0.2  30:30.64 mysqld                                                                                                                                            
16124 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.15 mysqld                                                                                                                                            
16493 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld    

Der insgesamt verwendete Speicher beträgt ca. 25 MB (Nehmen Sie die 27 MB RES und subtrahieren Sie die gemeinsam genutzte (SHR))

Ich habe dies überprüft, indem ich die gesamte Speichernutzung (frei -m, + / Puffer / Cache) vor und nach der Ausgabe eines "killall mysqld" überprüft habe. Nachdem alle mysqld-Prozesse beendet wurden, sank die Speichernutzung laut "free -m" um 25 MB.

Wenn Sie sehen, dass jeder Prozess identische VIRT-, RES- und SHR-Spalten hat, handelt es sich wahrscheinlich nur um Threads desselben Prozesses. (Ältere Linux-Bibliotheken handhabten das Threading, indem sie mehrere reale Prozesse erzeugten, die im Wesentlichen denselben Speicher belegten.)

Wenn sie unterschiedlich sind, können Sie sie möglicherweise durch eine SUMME von (RES - SHR) abschätzen. Dies funktioniert jedoch nur, wenn die Prozesse tatsächlich separate Prozesse sind und nicht nur Threads desselben Prozesses. Ein Blick auf die PPID (Parent Process ID) hilft ebenfalls. Wenn sie alle das gleiche Elternteil haben, sind sie wahrscheinlich nur Threads (obwohl nicht unbedingt).

Leider gibt es unter Linux keine wirklich gute und einfache Möglichkeit, dies zu beantworten. Die einzige einfache Möglichkeit besteht darin, "frei" unmittelbar vor Beendigung des Vorgangs zu überprüfen und unmittelbar danach erneut zu überprüfen. Sehen Sie sich die Zeile "- / + Puffer / Cache:" an und sehen Sie, wie viel Speicher belegt wurde. Daraufhin wird angezeigt, wie viel Speicher verwendet wurde.

irwinr
quelle
2

Mit ein bisschen Hilfe von man psund dieser tollen Antwort ...

ps -up $(pidof PROCESS_NAME)

Zum Beispiel:

[wilf@comp ~]$ ps -up $(pidof firefox)
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
wilf      1619  8.9  5.6 1464216 342396 ?      Sl   17:56   1:36 /usr/lib64/firefox/firefox
[wilf@comp ~]$ 

Andere Möglichkeiten:

cat /proc/$(pidof firefox)/status | grep VmSize

Dies kann ohne -xund ausgeführt werden tail -1:

pmap -x $(pidof firefox) | tail -1

zeigt nur Prozentsatz:

top -p $(pidof firefox)

Während der Verwendung können topSie außerdem drücken i, um Leerlauf- / Zombie-Prozesse zu ignorieren und das Lesen zu vereinfachen: viel kleinerer Top-Output

Wilf
quelle
Eine Anwendung startet jedoch mehrere Prozesse. Wie kann ich wissen, welcher der Hauptprozesse ist?
vermuten? Ich denke, pmapzeigt viele Dinge über Ressourcen, die die PID verwendet. Die Informationen werden basierend auf dem Namen des Prozesses und der daraus ermittelten PID bereitgestellt pidof, sodass der Hauptprozess angezeigt wird, wenn der Name angegeben wird (ich glaube, ich weiß nicht, ob er sich auf übergeordnete Prozesse bezieht)
Wilf
2
Dies trennt die Ausgabe nach Prozess. Auf diese Weise erhalten Sie nicht die gesamte Speichermenge, die von allen Apache-Prozessen verwendet wird. Sie müssen zusammenfassen, aber gemeinsam genutzte Regionen nur einmal zählen (dies ist das schwierige Bit).
Gilles 'SO - hör auf böse zu sein'