web-dev-qa-db-ja.com

Linux上の単一プロセスのCPU使用量とメモリ使用量を取得しますか?

私はLinux上の単一プロセスのCPUとメモリの使用量を取得したいのです - 私はPIDを知っています。うまくいけば、私はそれを毎秒取得して 'watch'コマンドを使用してCSVに書き込むことができます。 Linuxのコマンドラインからこの情報を取得するために使用できるコマンドは何ですか?

149
Supertux
ps -p <pid> -o %cpu,%mem,cmd

( "cmd"を省略することもできますが、これはデバッグに役立ちます)。

これにより、実行中のプロセスの平均CPU使用率がわかります。

201
caf

caf's answer のバリエーション:top -p <pid>

これによりCPU使用率が自動更新されるため、監視に役立ちます。

60
Manki

あなたが使用してプロセスの名前で結果を得ることができます

ps -C chrome -o %cpu,%mem,cmd

-Cオプションを使用すると、pidを知らなくてもプロセス名を使用できます。

31
amit

Pidstatを使用してください(sysstatから リンクを参照 )。

例えば5秒ごとにこれら2つのプロセスID(12345と11223)を監視する

$ pidstat -h -r -u -v -p 12345,11223 5
23
Neon

プログラムを起動して監視します

この形式は、実行ファイルを簡単にベンチマークしたい場合に便利です。

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
5
aviranh
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
4
Patel95

top -bを使用して必要なpidをgrepする(-bフラグを先頭にしてバッチモードで実行する)ことも、grepを使用せずに-pフラグを使用してpidを指定することもできます。

4

psコマンド(使用しないでください):

topコマンド(使用する必要があります):

リアルタイム(現在の短い間隔)でCPU使用率を取得するにはtopを使用します。

top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'

次のようにエコーします。78.6

4
vikyd
ps aux|awk  '{print $2,$3,$4}'|grep PID

最初の列はPID、2番目の列はCPU使用量、3番目の列はメモリ使用量です。

2
Osama Al-Banna

これは、1つまたは複数のプログラムをリアルタイムで追跡しながら、他のツールの出力も監視するのに便利なトリックです:watch "top -bn1 -p$(pidof foo),$(pidof bar); tool"

1
Tom Wocken

アプリケーションが使用している共有ライブラリとは対照的に、アプリケーションだけのメモリ使用量を取得するには、Linuxのsmapsインターフェイスを使用する必要があります。 この答えはそれをよく説明しています

1
Paul Biggar

ここでのすべての答えは、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
1
Banana
ps axo pid,etime,%cpu,%mem,cmd | grep 'processname' | grep -v grep

PID - プロセスID

etime - プロセス実行/ライブ期間

%cpu - CPU使用率

%mem - メモリ使用量

cmd - コマンド

あなたが追跡したい任意のプロセス、mysql nginx php-fpmなどでprocessnameを置き換えてください...

1
Siva KR

選択された答えがなぜうまくいかないのか疑問に思うようにしばらく苦労した人たちのために:

ps -p <pid> -o %cpu,%mem

%cpu,%memの間にスペースはありません。

0
ZhaoGang

上記のトップCPUとメモリ消費プロセス

        ps axo %cpu,%mem,command | sort -nr | head
0
user8854776

(あなたがMacOS 10.10を使っているのなら、topの累積的な-cオプションを試してください。

top -c a -pid PID

(このオプションは他のLinuxでは利用できません。ScientificLinux el6とRHEL6で試してください)

0
Kieleth