ps コマンドの使用法

ps コマンドは、システム上で実行中のプログラムと、プログラムで使用しているリソースの識別のための柔軟なツールです。 システム上のプロセスに関する統計と状況情報 (プロセス ID、スレッド ID、入出力アクティビティー、CPU、メモリー使用率など) が表示されます。

このセクションでは、CPU に関係のあるオプションと出力フィールドについてのみ説明します。

可能な ps 出力欄は 3 つあり、それぞれ異なる方式で CPU 使用量を報告します。

値:
C
そのプロセスで一番最近使用された CPU 時間 (クロックの目盛り単位)。
時刻
プロセスが始動以来使用した合計 CPU 時間 (分と秒単位)。
CPU (%CPU)
プロセスが始動以来使用した合計 CPU 時間を、 プロセス始動以来の経過時間で割った値。 この時間はプログラムの CPU 依存度を測る尺度です。

CPU 集中

次のシェル・スクリプト、
# ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15
は、システム内で最近 CPU を最も多く使用した CPU 集中ユーザー・プロセスを示すツールです (ヘッダー行は分かりやすくするためにあらためて付け加えてあります)。
     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 -ksh

列 (C) 最近使用された CPU を示します。 ループするプログラムのプロセスは、リストの先頭に来ます。 このCスケジューラーが 120 でカウントを停止するため、値によってループ・プロセスの CPU 使用量を最小化できます。 マルチスレッド・プロセスの場合、このフィールドはそのプロセス内のすべてのスレッドについてリストされた CP の和を示します。

次の例は、すべてのスレッドが 1 つの無限ループ・プログラム内にある単純な 5 スレッドのプログラムを示しています。
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 コマンドは、定期的に実行され、CPU 時間を以下の下に表示します。TIMEの下での実時間に対する CPU 時間の比率を示します。%CPU列。 使用率が最高のプロセスを探してください。 au オプションと v オプションは、ユーザー・プロセスに関して類似した情報を表示します。 aux オプションと vg オプションは、 ユーザー・プロセスとシステム・プロセスの両方を表示します。

次の例は、4-way SMP システムからとったものです。
# 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
この%CPUプロセスの開始以降、そのプロセスに割り振られた CPU 時間の割合 (%) です。 次の式で算出します。
(process CPU time / process duration) * 100

次のような 2 つのプロセスを想像してください。最初のプロセスは始動して 5 秒間実行しますが、終了しません。その後に 2 番目のプロセスが始動して 5 秒間実行しますが、終了しません。 ps コマンドで 50 パーセントが表示されるようになります。%CPU最初のプロセスの場合 (経過時間が 10 秒の場合は 5 秒の CPU)、2 番目のプロセスの場合は 100% (経過時間が 5 秒の場合は 5 秒の CPU)。

SMP の場合、この値はシステム上で使用可能な CPU の数で割ります。 前の例を振り返ると、以下の理由があります。%CPUこの例は 4-way プロセッサー・システムで実行されるため、 cpubound プロセスの値が 25 を超えることはありません。 cpubound プロセスは、1 つのプロセッサーの 100% を使用しますが、%CPU値は、使用可能な CPU の数で除算されます。

THREAD オプション

ps コマンドは、ps -mo THREAD コマンドを使用することによって、スレッドおよびスレッドかプロセスがバインドされている CPU を表示することができます。 次に例を示します。
# 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(オペレーティング・システム・バージョン 4 の 516 の PID) は CPU 時間を使用しています。 タイム・スライス中に実行できるスレッドがない場合、スケジューラーがそのタイム・スライスの CPU 時間をこのカーネル・プロセス (kproc) に割り当てます。これはアイドル または待ち kproc と呼ばれています。 SMP システムでは、プロセッサーごとにアイドルの kproc が 1 つずつあります。