サブプロセスのCPUとメモリ使用量を確認する方法

サブプロセスのCPUとメモリ使用量を確認する方法

supervisordCentOS サーバーで実行しています。もし私がするなら

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

私は初期化デーモンなので、0 0それを得ています。supervisord私のサーバーで4つのサブプロセスを実行します。

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

1行のコマンドで、これらのサブプロセスのCPUとメモリ使用量の概要をどのように見つけることができますか?

答え1

コードハッピーラウアの答え

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

サブレイヤーは1つだけ取得できます。

デフォルトのPIDから派生したすべてのプロセスを取得するには、次のコードを使用してください。

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

基本プロセスのpidは子プロセスのPGIDです。

答え2

与えられた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

pgrepからすべての子プロセスのPIDを取得することはできません。

答え3

以下を試してくださいxargs

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

関連情報