回答:
ps -p <pid> -o %cpu,%mem,cmd
(「cmd」は省略できますが、デバッグに役立つ場合があります)。
これにより、プロセスが実行されている時間の平均CPU使用率が得られることに注意してください。
| tail -n +2
ps
。これは実際のCPU使用量ではありません。top
たとえば、表示されているものとは大きく異なる場合もあります。
ps -e -o pcpu,args
に、プロセスの存続期間中のCPU平均を表示します。これは、長時間実行プロセスの場合は明らかに望ましいものではありません
cafの回答の変形:
top -p <pid>
これにより、CPU使用率が自動更新されるため、監視に適しています。
pgrep
ます:top -p $(pgrep process_name)
あなたは使用してプロセスの名前で結果を得ることができます
ps -C chrome -o %cpu,%mem,cmd
この-C
オプションを使用すると、pidを知らなくてもプロセス名を使用できます。
pid
のみが機能します。ps -C chrome -o pid,%cpu,%mem,cmd
pidstatを使用します(sysstatから- リンクを参照)。
たとえば、これら2つのプロセスID(12345および11223)を5秒ごとに監視するには
$ pidstat -h -r -u -v -p 12345,11223 5
pidstat
はすばらしいコマンドだと指摘してくれてありがとう、スクリプト作成にも便利です。
pidstat
また、良い平均を与えます。ただ残念なことですが、よりエレガントな方法を見つけられませんでしたpidstat -u 1 10 | grep ^Average | sort -r -n -b -k 8,8
ps
コマンド(使用しないでください):
top
コマンド(使用する必要があります):
top
CPU使用率をリアルタイムで取得するために使用します(現在の短い間隔):
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使用数)プログラムを起動して監視する
このフォームは、実行可能ファイルを簡単にベンチマークする場合に便利です。
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でテスト済み。
使用top -b
するpidを使用してgrepで出力するか(-b
フラグtop runをバッチモードで実行)、または-p
フラグを使用してgrepを使用せずにpidを指定することもできます。
アプリケーションのみのメモリ使用量を取得するには(アプリケーションが使用する共有ライブラリとは対照的に、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
次のコマンドは、特定のプロセス(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
上記のCPUとメモリを消費するプロセスのリスト
ps axo %cpu,%mem,command | sort -nr | head
@cafの答えに基づいて、これは私にとってうまくいきます。
指定されたPIDの平均を計算します。
measure.sh
times=100
total=0
for i in $(seq 1 $times)
do
OUTPUT=$(top -b -n 1 -d 0.1 -p $1 | tail -1 | awk '{print $9}')
echo -n "$i time: ${OUTPUT}"\\r
total=`echo "$total + $OUTPUT" | bc -l`
done
#echo "Average: $total / $times" | bc
average=`echo "scale=2; $total / $times" | bc`
echo "Average: $average"
使用法:
# send PID as argument
sh measure.sh 3282