So ermitteln Sie die CPU- und Speichernutzung untergeordneter Prozesse

9

supervisordwird auf dem CentOS-Server ausgeführt. Wenn ich mache

ps -e -o %mem,%cpu,cmd | grep supervisord | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'

Ich bekomme 0 0nur, weil supervisordes nur ein Initialisierungsdämon ist. Auf meinem Server werden vier untergeordnete Prozesse ausgeführt:

# pgrep -P $(pgrep supervisord) | wc -l
4

Wie kann ich die zusammengefasste CPU- und Speicherauslastung dieser untergeordneten Prozesse in einem einzeiligen Befehl finden?

KennyPowers
quelle

Antworten:

5

der Code

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

wird nur eine untergeordnete Ebene erhalten

Wenn Sie nach allen Prozessen suchen möchten, die von einer Haupt-PID abgeleitet wurden, verwenden Sie diesen Code.

ps -o pid,ppid,pgid,comm,%cpu,%mem  -u {user name} | {grep PID_PRINCIPAL}

Die PID des Hauptprozesses ist die PGID der untergeordneten Prozesse.

jhonatan1090
quelle
5

Gegeben a pid,

pid=24535
pstree -p $pid | grep -o '([0-9]\+)' | grep -o '[0-9]\+' |\
  xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
# 15.5 905.2

Ich hatte kein Glück, die Pids aller untergeordneten Prozesse von pgrep zu bekommen.

Daniel
quelle
2
% cpu in ps ist in der Tat problematisch. Es wird berechnet als CPU time used divided by the time the process has been running- das ist der historische Durchschnitt der% CPU-Auslastung, nicht der aktuelle Wert.
VladV
-1

Versuchen Sie es mit xargs:

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