Linux上の単一プロセスのCPUとメモリの使用量を取得したい-PIDを知っている。うまくいけば、毎秒取得して、「watch」コマンドを使用してCSVに書き込むことができます。Linuxコマンドラインからこの情報を取得するためにどのコマンドを使用できますか?
21 に答える
ps -p <pid> -o %cpu,%mem,cmd
(「cmd」を省略できますが、デバッグに役立つ場合があります)。
これにより、実行中のプロセスの平均 CPU 使用率がわかります。
カフェの答えの変形:
top -p <pid>
これにより、CPU 使用率が自動更新されるため、監視に適しています。
プログラムを起動して監視する
この形式は、実行可能ファイルを簡単にベンチマークしたい場合に便利です:
topp() (
$* &>/dev/null &
pid="$!"
trap ':' INT
echo 'CPU MEM'
while sleep 1; do ps --no-headers -o '%cpu,%mem' -p "$pid"; done
kill "$pid"
)
topp ./myprog arg1 arg2
Ctrl + C を押すと、プログラムが終了し、監視が停止します。出力例:
CPU MEM
20.0 1.3
35.0 1.3
40.0 1.3
関連: https://unix.stackexchange.com/questions/554/how-to-monitor-cpu-memory-usage-of-a-single-process
Ubuntu 16.04 でテスト済み。
上記のcafの回答でコメントしたように、 ps および場合によっては pidstat は、pCPUの生涯平均を提供します。より正確な結果を得るには、top を使用します。一度トップを実行する必要がある場合は、次を実行できます。
top -b -n 1 -p <PID>
またはプロセスのみのデータとヘッダーの場合:
top -b -n 1 -p <PID> | tail -3 | head -2
ヘッダーなし:
top -b -n 1 -p <PID> | tail -2 | head -1
必要な pid を使用top -b
して grep することも (-b
フラグ top runs in batch mode)、または-p
フラグを使用して grep を使用せずに pid を指定することもできます。
次のコマンドは、特定のプロセス (pid) の 40 秒ごとの CPU およびメモリ使用量の平均を取得します。
pidstat 40 -ru -p <pid>
私の場合の出力 (CPU 使用率の最初の 2 行、メモリの次の 2 行):
02:15:07 PM PID %usr %system %guest %CPU CPU Command
02:15:47 PM 24563 0.65 0.07 0.00 0.73 3 java
02:15:07 PM PID minflt/s majflt/s VSZ RSS %MEM Command
02:15:47 PM 24563 6.95 0.00 13047972 2123268 6.52 java
ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr
またはプロセスごと
ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr |grep mysql
ps axo pid,etime,%cpu,%mem,cmd | grep 'processname' | grep -v grep
PID - プロセス ID
etime - プロセスの実行中/有効期間
%cpu - CPU 使用率
%mem - メモリ使用量
cmd - コマンド
プロセス名を追跡したいプロセス、mysql nginx php-fpmなどに置き換えます...
(MacOS 10.10 を使用している場合は、top の累積 -c オプションを試してください:
top -c a -pid PID
(このオプションは他の Linux では利用できません。Scientific Linux el6 と RHEL6 で試してみました)
アプリケーションだけのメモリ使用量を取得するには (アプリケーションが使用する共有ライブラリではなく、Linux smaps インターフェイスを使用する必要があります)。この答えはそれをよく説明しています。
ps aux|awk '{print $2,$3,$4}'|grep PID
ここで、最初の列は PID、2 番目の列は CPU 使用率、3 番目の列はメモリ使用率です。
@Neonの回答に基づいて、ここに私の2セント:
pidstat -h -r -u -v -p $(ps aux | grep <process name> | awk '{print $2}' | tr '\n' ',')