私はLinux上の単一プロセスのCPUとメモリの使用量を取得したいのです - 私はPIDを知っています。うまくいけば、私はそれを毎秒取得して 'watch'コマンドを使用してCSVに書き込むことができます。 Linuxのコマンドラインからこの情報を取得するために使用できるコマンドは何ですか?
ps -p <pid> -o %cpu,%mem,cmd
( "cmd"を省略することもできますが、これはデバッグに役立ちます)。
これにより、実行中のプロセスの平均CPU使用率がわかります。
caf's answer のバリエーション:top -p <pid>
これによりCPU使用率が自動更新されるため、監視に役立ちます。
あなたが使用してプロセスの名前で結果を得ることができます
ps -C chrome -o %cpu,%mem,cmd
-C
オプションを使用すると、pidを知らなくてもプロセス名を使用できます。
Pidstatを使用してください(sysstatから リンクを参照 )。
例えば5秒ごとにこれら2つのプロセスID(12345と11223)を監視する
$ pidstat -h -r -u -v -p 12345,11223 5
プログラムを起動して監視します
この形式は、実行ファイルを簡単にベンチマークしたい場合に便利です。
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's answer でコメントされているように、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
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
top -b
を使用して必要なpidをgrepする(-b
フラグを先頭にしてバッチモードで実行する)ことも、grepを使用せずに-p
フラグを使用してpidを指定することもできます。
ps
コマンド(使用しないでください):
top
コマンド(使用する必要があります):
リアルタイム(現在の短い間隔)でCPU使用率を取得するにはtop
を使用します。
top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'
次のようにエコーします。78.6
-b
:バッチモード-n 2
:反復回数。2
を使用してください。 最初に実行したときには、比較するサンプルがありません。したがって、これらの初期値は起動後のパーセンテージです。-d 0.2
:遅延時間(秒、ここでは200msです)-p 6962
:モニターPIDtail -1
:最後の行awk '{print $9}'
:9列目(CPU使用番号)ps aux|awk '{print $2,$3,$4}'|grep PID
最初の列はPID、2番目の列はCPU使用量、3番目の列はメモリ使用量です。
これは、1つまたは複数のプログラムをリアルタイムで追跡しながら、他のツールの出力も監視するのに便利なトリックです:watch "top -bn1 -p$(pidof foo),$(pidof bar); tool"
アプリケーションが使用している共有ライブラリとは対照的に、アプリケーションだけのメモリ使用量を取得するには、Linuxのsmapsインターフェイスを使用する必要があります。 この答えはそれをよく説明しています 。
ここでのすべての答えは、PIDのメモリパーセンテージだけを示しています。
すべてのApacheプロセスのrssメモリ使用量をKBで取得する方法の例を示します。特定のPIDを監視するだけの場合は、「grep Apache」を「grep PID」に置き換えます。
watch -n5 "ps aux -y | grep Apache | awk '{print \$2,\$6}'"
これは印刷します:
Every 5.0s: ps aux -y | grep Apache | awk '{print $2,$6}'
Thu Jan 25 15:44:13 2018
12588 9328
12589 8700
12590 9392
12591 9340
12592 8700
12811 15200
15453 9340
15693 3800
15694 2352
15695 1352
15697 948
22896 9360
CPU%の場合:
watch -n5 "ps aux -y | grep Apache | awk '{print \$2,\$3,\$6}'"
出力:
Every 5.0s: ps aux -y | grep Apache | awk '{print $2,$3,$6}'
Thu Jan 25 15:46:00 2018
12588 0.0 9328
12589 0.0 8700
12590 0.0 9392
12591 0.0 9340
12592 0.0 8700
12811 0.0 15200
15453 0.0 9340
15778 0.0 3800
15779 0.0 2352
15780 0.0 1348
15782 0.0 948
22896 0.0 9360
ps axo pid,etime,%cpu,%mem,cmd | grep 'processname' | grep -v grep
PID - プロセスID
etime - プロセス実行/ライブ期間
%cpu - CPU使用率
%mem - メモリ使用量
cmd - コマンド
あなたが追跡したい任意のプロセス、mysql nginx php-fpmなどでprocessnameを置き換えてください...
選択された答えがなぜうまくいかないのか疑問に思うようにしばらく苦労した人たちのために:
ps -p <pid> -o %cpu,%mem
%cpu,
と%mem
の間にスペースはありません。
上記のトップCPUとメモリ消費プロセス
ps axo %cpu,%mem,command | sort -nr | head
(あなたがMacOS 10.10を使っているのなら、topの累積的な-cオプションを試してください。
top -c a -pid PID
(このオプションは他のLinuxでは利用できません。ScientificLinux el6とRHEL6で試してください)