ps コマンドの使用法
ps コマンドは、システム上で実行中のプログラムと、 プログラムで使用しているリソースの識別のための柔軟なツールです。 システム上のプロセスに関する統計と状況情報 (プロセス ID、スレッド ID、入出力アクティビティー、CPU、メモリー使用率など) が表示されます。
このセクションでは、CPU に関係のあるオプションと出力フィールドについてのみ説明します。
可能な ps 出力欄は 3 つあり、それぞれ異なる方式で CPU 使用量を報告します。
- 欄
- 値:
- C
- そのプロセスで一番最近使用された CPU 時間 (クロックの目盛り単位)。
- TIME
- プロセスが始動以来使用した合計 CPU 時間 (分と秒単位)。
- %CPU
- プロセスが始動以来使用した合計 CPU 時間を、 プロセス始動以来の経過時間で割った値。 この時間はプログラムの CPU 依存度を測る尺度です。
CPU 集中
# ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15 UID PID PPID C STIME TTY TIME CMD
mary 45742 54702 120 15:19:05 pts/29 0:02 ./looper
root 52122 1 11 15:32:33 pts/31 58:39 xhogger
root 4250 1 3 15:32:33 pts/31 26:03 xmconsole allcon
root 38812 4250 1 15:32:34 pts/31 8:58 xmconstats 0 3 30
root 27036 6864 1 15:18:35 - 0:00 rlogind
root 47418 25926 0 17:04:26 - 0:00 coelogin <d29dbms:0>
bick 37652 43538 0 16:58:40 pts/4 0:00 /bin/ksh
bick 43538 1 0 16:58:38 - 0:07 aixterm
luc 60062 27036 0 15:18:35 pts/18 0:00 -kshC 欄は最近使用された CPU を示します。ループするプログラムのプロセスは、リストの先頭に来ます。 スケジューラーが 120 でカウントを停止するので、ループするプロセスの CPU 使用量を C の値により最小化できます。マルチスレッド・プロセスの場合、このフィールドはそのプロセス内のすべてのスレッドについてリストされた CP の和を示します。
ps -lmo THREAD -p 8060956
USER PID PPID TID ST CP PRI SC WCHAN F TT BND COMMAND
root 8060956 6815882 - A 720 120 0 - 200001 pts/0 - ./a.out
- - - 8716483 R 120 120 0 - 400000 - - -
- - - 17105017 R 120 120 0 - 400000 - - -
- - - 24182849 R 120 120 0 - 400000 - - -
- - - 24510589 R 120 120 0 - 400000 - - -
- - - 30277829 R 120 120 0 - 400000 - - -
- - - 35913767 R 120 120 0 - 400000 - - -
「CP」欄の値 720 は、この値の下にリストされた個別スレッドの和、すなわち (5 * 120) + (120) です。CPU 時間比率
ps コマンドは、周期的に実行されて、「TIME」欄の下に CPU 時間を表示し、 「%CPU」欄の下に CPU 時間のリアルタイムに対する比率を表示します。 使用率が最高のプロセスを探してください。 au オプションと v オプションは、 ユーザー・プロセスに関して類似した情報を表示します。 aux オプションと vg オプションは、 ユーザー・プロセスとシステム・プロセスの両方を表示します。
# ps au
USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND
root 19048 24.6 0.0 28 44 pts/1 A 13:53:00 2:16 /tmp/cpubound
root 19388 0.0 0.0 372 460 pts/1 A Feb 20 0:02 -ksh
root 15348 0.0 0.0 372 460 pts/4 A Feb 20 0:01 -ksh
root 20418 0.0 0.0 368 452 pts/3 A Feb 20 0:01 -ksh
root 16178 0.0 0.0 292 364 0 A Feb 19 0:00 /usr/sbin/getty
root 16780 0.0 0.0 364 392 pts/2 A Feb 19 0:00 -ksh
root 18516 0.0 0.0 360 412 pts/0 A Feb 20 0:00 -ksh
root 15746 0.0 0.0 212 268 pts/1 A 13:55:18 0:00 ps au(process CPU time / process duration) * 100次のような 2 つのプロセスを想像してください。最初のプロセスは始動して 5 秒間実行しますが、終了しません。その後に 2 番目のプロセスが始動して 5 秒間実行しますが、終了しません。 この場合、ps コマンドは最初のプロセスに 50% の「%CPU」(10 秒の経過時間に対して 5 秒の CPU) を示し、2 番目のプロセスには 100% (5 秒の経過時間に対して 5 秒の CPU) を示します。
SMP の場合、この値はシステム上で使用可能な CPU の数で割ります。 もう一度前の例を見てください。この例は 4-Way プロセッサー・システムで実行していて、cpubound の処理の %CPU 値が絶対に 25 を超えないのはそのためだと分かります。 cpubound プロセスは 1 つのプロセッサーを 100% 使用していますが、「%CPU」は使用可能な CPU の数で割ります。
THREAD オプション
# ps -mo THREAD
USER PID PPID TID ST CP PRI SC WCHAN F TT BND COMMAND
root 20918 20660 - A 0 60 1 - 240001 pts/1 - -ksh
- - - 20005 S 0 60 1 - 400 - - -「TID」欄はスレッド ID を、 「BND」欄はプロセッサーにバインドされたプロセスおよびスレッドを示しています。
kproc (AIX オペレーティング・システム バージョン 4 では PID が 516) が CPU 時間を使用しているのは正常です。 タイム・スライス中に実行できるスレッドがない場合、 スケジューラーがそのタイム・スライスの CPU 時間をこのカーネル・プロセス (kproc) に割り当てます。これはアイドル または待ち kproc と呼ばれています。 SMP システムでは、プロセッサーごとにアイドルの kproc が 1 つずつあります。
ps コマンドについて詳しくは、 コマンド・リファレンス のを参照してください。