Überprüfen Sie die Gesamtnutzung des physischen Speichers und der CPU für ein Programm unter Linux

Überprüfen Sie die Gesamtnutzung des physischen Speichers und der CPU für ein Programm unter Linux

Ich möchte vergleichen, wie viel physischen Speicher und CPU-Leistung Google Chrome und Firefox verwenden. Also habe ich versucht, dies mit htop zu tun, was ich normalerweise verwende, um meine Systemressourcen im Auge zu behalten, und musste feststellen, dass ich zu keinem Ergebnis komme. Ich habe mehrere Threads gelesen, bin aber immer noch verwirrt, und zwar aus folgendem Grund: Wenn ich mit F4 z. B. nach Chrome filtere, zeigt mir htop dutzende Tasks an, bei denen ich nicht weiß, ob es Threads oder Prozesse sind. Soweit ich weiß, teilen sich Threads den gleichen Adressraum, Prozesse jedoch nicht. Ich kann F5 drücken, um eine Baumstruktur anzuzeigen, in der es einen übergeordneten Task für alle Tasks gibt. Die Annahme, dass der Wert des übergeordneten Tasks in der Spalte RES den Gesamtspeicher angibt und der Wert in der Spalte CPU% die gesamte CPU-Auslastung für dieses Programm, unabhängig davon, ob es mehrere Prozesse oder Threads verwendet, ist anscheinend falsch. Das habe ich mit diesem kleinen Experiment herausgefunden: Ich habe ein gefundenes Python-Programm ausgeführt, das für einige Berechnungen Multiprocessing verwendet. Folgendes habe ich in htop gesehen: Der übergeordnete Wert in der Spalte „CPU%“ zeigt die ganze Zeit 0 an, aber es gibt 7 Aufgaben, die bis zu 100 % ausgelastet sind (mein System hat 4 physische Kerne mit jeweils 2 Threads).

Kann mir also bitte jemand erklären, was hier los ist und wie ich die Gesamtnutzung des physischen Speichers und der CPU für ein Programm überprüfen kann?

Soweit ich gelesen habe, ist es nicht so einfach, den genauen Speicherverbrauch zu ermitteln, aber der absolute Wert ist in meinem Fall nicht wichtig, ich brauche lediglich Werte, die ich zum Vergleich verwenden kann.

Antwort1

Sie können diesen Befehl verwenden:

pgrep -P $(pgrep chrome) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'

Oder dieses (ändern Sie 9 $, um Ihre Spalte auszuwählen):

top -b -n1 | grep chrome | awk '{ SUM += $9} END { print SUM }'

Weitere Befehle und Ratschläge finden Sie unter:

Antwort2

psgrep gibt einen Fehler aus:

$ pgrep -P $(pgrep chrome) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
pgrep: only one pattern can be provided
Try `pgrep --help' for more information.
error: list of process IDs must follow -p

Usage:
ps [options]

Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.

For more details see ps(1).

Ich kann mit htop die übergeordnete PID-Aufgabe sehen und Folgendes tun:

$ pgrep -P 1721 | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
1.2 2.6

aber 1,2 % Speicher scheinen zu wenig zu sein.

top zählt nicht alles. Beispiel: $ top -b -n1 | grep freeplane | awk '{ SUM += $9} END { print SUM }' Ich erhalte 0, weil nur dieser Befehl abgerufen wird: /usr/share/freeplane/freeplane.sh, aber nicht dieser: /usr/sbin/java -Xmx512m -Dorg.freeplane

PS: auxf scheint alles zu zählen und für Chrome erhalte ich Folgendes:

$ ps auxf | grep chrome | awk '{ SUM += $4} END { print SUM }'
5.024G

was realistischer erscheint. Wenn ich den verwendeten Speicher jedoch mit messe:

$ free -h

Vor und nach dem Schließen von Chrome sehe ich einen Unterschied von 2,4 Gi.

BEARBEITEN: Ich habe ps_mem gefunden, womit sich die Speichernutzung jeder Anwendung ganz einfach überprüfen und vergleichen lässt.

verwandte Informationen