コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

TOPコマンドを使いこなしてTOPを狙う。

気まぐれで、topコマンドのmanを簡単に確認してみました。初めに言っておくと、manコマンドに記載されている以上のことはないのでそれを読める人は必要ないと思います。
環境としては、CentOS 4.4です。

対話画面の基本

まず、topを単純に実行した場合の見かた、起動後のコマンドの使い方を確認する。

対話画面の見かた

topコマンドを単純にオプション無しで実行すると以下のようになる。

top - 20:49:53 up 7 min,  1 user,  load average: 0.03, 0.36, 0.23
Tasks:  79 total,   2 running,  77 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0% us,  0.3% sy,  0.0% ni, 99.7% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   1035556k total,   453728k used,   581828k free,    13820k buffers
Swap:  2096472k total,        0k used,  2096472k free,   329060k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      16   0  3368  552  472 S  0.0  0.1   0:00.74 init
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    3 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 events/0
    4 root       6 -10     0    0    0 S  0.0  0.0   0:00.05 khelper
    5 root      15 -10     0    0    0 S  0.0  0.0   0:00.00 kacpid

まず基本的な見かたから確認する。1行目は、

top - 20:49:53 up 7 min,  1 user,  load average: 0.03, 0.36, 0.23

となっている。それぞれ以下のような意味を持つ。

20:49:53
現在時刻
up 7 min
起動してからの時間。この場合7分。
1user
ログインしているユーザー数。
load average: 0.03, 0.36, 0.23
数字の最初から1、5、15分間の実行待ちプロセス数の平均。

CPU使用率が低くても、ロードアベレージがプロセッサ数もしくは、プロセッサのコア数より多いと負荷が高い状態と言われる。VMにOracleを導入している時などは平気で20とか出ます。

2行目は

Tasks:  79 total,   2 running,  77 sleeping,   0 stopped,   0 zombie

最後の状態に実行中だったプロセス数を表示している。それぞれ以下の意味となる。

記号 説明
total プロセスの総数。。
running 実行中のプロセス数。
sleeping スリープ状態のプロセス数。
stopped 停止状態のプロセス数。
zonbie ゾンビ状態のプロセス数。

3行目は、

Cpu(s):  0.0% us,  0.3% sy,  0.0% ni, 99.7% id,  0.0% wa,  0.0% hi,  0.0% si

CPUの状態を表している。
それぞれ、以下のような意味となる。

記号 意味
us ユーザーモードの状態にある時間の割合。
sy システムモードの状態にある時間の割合。
ni niceされたタスクの実行中の状態にある時間の割合。
id アイドル状態にある時間の割合。
wa IOの終了待ちの状態にある時間の割合。
hi ハードウェア割り込み要求の状態にある時間の割合。
si ソフトウェア割り込みの状態にある時間の割合。

niceさrたタスクで費やされた時間は、システムモードやユーザーモードの時間としてもカウントされるので、これらの早慶は100%より大きくなる。

4行目と5行目はメモリ関連となる。4行目が実メモリ、5行目がスワップ領域となる。

Mem:   1035556k total,   453728k used,   581828k free,    13820k buffers
Swap:  2096472k total,        0k used,  2096472k free,   329060k cached

それぞれ、以下のような意味となる。

記号 意味
total トータルのメモリ量。
used 使用中のメモリ量。
free 使用していないメモリ量。
buffers バッファとして使用されているメモリ量。
cached キャッシュとして使用されているメモリ量。

6行目からのプロセスの一覧は表示内容をカスタマイズできるがまずは、標準の内容を確認する。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

それぞれ、以下のような内容となる。

記号 意味
PID タスクのプロセスID
USER タスクの所有者のユーザー名
PR タスクの優先度
NI タスクのnice値。小さい値が優先度が高い。
VIRT 仮想イメージ。単位はKB。
RES タスクの用いている物理メモリの総量。単位はKB。
SHR タスクが利用している共有メモリ。
S プロセスの状態。
%CPU 最後にスクリーンが更新されて以降、タスクがCPUを占有していた割合。プロセッサ一つあたりの時間に対するパーセンテージで表示される。
%MEM タスクの物理メモリの占有量
TIME+ タスクが起動してから利用したCPU時間の総量。
COMMAND タスクのコマンド名。
PPID 親プロセスID。
RUSER 実ユーザー名。
UID ユーザーID。
GROUP グループ名。
TTY 制御tty。
#C SMP時の最後に使用したCPU。
SWAP スワップサイズ。単位はKB。
TIME CPU時間。
CODE コードサイズ。単位はKB。
DATA データとスタックサイズ。単位はKB。
nFLT ページフォルトの回数。
nDRT ダーティページの数。
WCHAN スリープ状態の関数。
Flags タスクのフラグ。
UTIME CPUユーザー時間。
STIME CPUシステム時間。

Sのタスクの状態は、以下のいずれかとなる。

状態 説明
S スリープ状態。
D 割り込み不可能なスリープ状態。
R 実行中。
Z ゾンビ。
T 停止中。
負のnice値を持つプロセス。
N 正のnice値を持つプロセス。
W スワップアウトされたプロセス。
表示項目のカスタマイズ

デフォルトの表示から表示内容を変更することができる。
oとOで表示の順序を変更できる。順序変更画面は以下のようになる。

Current Fields:  AEHIOqTWKNMBcdfgjplrsuvyzX12  for window 1:Def
Upper case letter moves field left, lower case right

* A: PID        = Process Id                   0x00000004  PF_EXITING
* E: USER       = User Name                    0x00000040  PF_FORKNOEXEC
* H: PR         = Priority                     0x00000100  PF_SUPERPRIV
* I: NI         = Nice value                   0x00000200  PF_DUMPCORE
* O: VIRT       = Virtual Image (kb)           0x00000400  PF_SIGNALED
  q: RES        = Resident size (kb)           0x00000800  PF_MEMALLOC
* T: SHR        = Shared Mem size (kb)         0x00002000  PF_FREE_PAGES (2.5)
* W: S          = Process Status               0x00008000  debug flag (2.5)
* K: %CPU       = CPU usage                    0x00024000  special threads (2.5)
* N: %MEM       = Memory usage (RES)           0x001D0000  special states (2.5)
* M: TIME+      = CPU Time, hundredths         0x00100000  PF_USEDFPU (thru 2.4)
* B: PPID       = Parent Process Pid
  c: RUSER      = Real user name
  d: UID        = User Id
  f: GROUP      = Group Name
  g: TTY        = Controlling Tty
  j: #C         = Last used cpu (SMP)
  p: SWAP       = Swapped size (kb)
  l: TIME       = CPU Time
  r: CODE       = Code size (kb)
  s: DATA       = Data+Stack size (kb)
  u: nFLT       = Page Fault count
  v: nDRT       = Dirty Pages count
  y: WCHAN      = Sleeping in Function
  z: Flags      = Task Flags <sched.h>
* X: COMMAND    = Command name/line
  1: UTIME      = CPU User Time
  2: STIME      = CPU System Time

Flags field:
  0x00000001  PF_ALIGNWARN
  0x00000002  PF_STARTING

ここで、順序変更モードになっているので、項目名の左にあるアルファベットの小文字を押すと右に、大文字を押すと左にその項目が移動する。「*」はその項目が画面上に表示される項目であることを示す。このモードから抜けるには、「ESC」キーを押す。

同じように、fないしFキーを押すと項目の表示・非表示を切り替えるモードになる。順序の変更と同じような画面になるが、項目に対応するアルファベットを押すとその左にある「*」が付いたり消えたりする。このモードから抜けるには、「ESC」キーを押す。

ここで、たとえばPPIDを表示し一番左側に移動すると以下のように表示される。

top - 22:22:07 up  1:39,  1 user,  load average: 0.00, 0.00, 0.08
Tasks:  77 total,   2 running,  75 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0% us,  0.3% sy,  0.0% ni, 99.3% id,  0.3% wa,  0.0% hi,  0.0% si
Mem:   1035556k total,   988488k used,    47068k free,    44780k buffers
Swap:  2096472k total,        0k used,  2096472k free,   779988k cached

 PPID   PID USER      PR  NI  VIRT  SHR S %CPU %MEM    TIME+  COMMAND
    1  5312 root      16   0  4856 1308 S  0.3  0.3   0:04.75 hald
 6133  6437 gdm       15   0 51544 9532 S  0.3  2.0   0:03.71 gdmgreeter
 7334 30383 root      16   0  2060  768 R  0.3  0.1   0:00.01 top
    0     1 root      16   0  3368  472 S  0.0  0.1   0:00.81 init
    1     2 root      34  19     0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    1     3 root       5 -10     0    0 S  0.0  0.0   0:00.00 events/0
情報の表示、非表示

1〜5行目の情報はトグルキーを用いることで表示、非表示を切り替えることができる。

トグルキー 分類
l 時刻からロードアベレージの情報。 1行目
t CPU関連の情報。 2〜3行目
m メモリ関連の情報。 4〜5行目

たとえば、2〜5行目をトグルで消した状態は以下のようになる。

top - 21:26:59 up 44 min,  1 user,  load average: 0.00, 0.00, 0.00

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      16   0  3368  552  472 S  0.0  0.1   0:00.77 init
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    3 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 events/0
    4 root       6 -10     0    0    0 S  0.0  0.0   0:00.05 khelper
    5 root      15 -10     0    0    0 S  0.0  0.0   0:00.00 kacpid
対話コマンド

topコマンド実行この画面でいくつかのコマンドが使用できる。

コマンド 説明
h ヘルプ
space 表示を更新する。指定の実行間隔以外で即時に今の状態に変更する。
k プロセスをkillする。
n 表示するプロセス数を変更する。プロンプトが出るので表示する数を入れる。
q 対話コマンドを終了する。

kコマンドを実行すると以下のような画面になるので、killしたいPIDとシグナルを入れる。

top - 09:28:48 up 2 min,  1 user,  load average: 0.85, 0.47, 0.17
Tasks:  83 total,   2 running,  81 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0% us,  5.4% sy,  0.0% ni, 94.6% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   1035556k total,   497920k used,   537636k free,    13468k buffers
Swap:  2096472k total,        0k used,  2096472k free,   363936k cached
PID to kill:
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 5213 oracle    18   0  363m  60m  58m S  5.3  6.0   0:02.36 oracle
 6508 root      16   0  3464  980  764 R  0.3  0.1   0:00.04 top
    1 root      16   0  2840  552  472 S  0.0  0.1   0:01.31 init
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    3 root       5 -10     0    0    0 S  0.0  0.0   0:00.01 events/0

表示するプロセス数を変更する、例えばnを2にすると以下のように表示するプロセス数を限定できる。

top - 09:29:20 up 3 min,  1 user,  load average: 0.51, 0.42, 0.17
Tasks:  83 total,   2 running,  81 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0% us,  0.0% sy,  0.0% ni, 100.0% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   1035556k total,   498016k used,   537540k free,    13508k buffers
Swap:  2096472k total,        0k used,  2096472k free,   363936k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      16   0  2840  552  472 S  0.0  0.1   0:01.31 init
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0

<や>を押すと、ソートするフィールドを変更で来る。<を押すとソートする項目を左に1つ移動、>は右に移動する。例えば、ソートするフィールドが「%CPU」の時に、<を押すとソートするフィールドが「S」になる。<を何度か押し、PIDをソートするフィールドにすると以下のようになる。

top - 09:31:09 up 5 min,  1 user,  load average: 0.08, 0.29, 0.15
Tasks:  79 total,   2 running,  77 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0% us,  0.0% sy,  0.0% ni, 100.0% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   1035556k total,   489128k used,   546428k free,    13684k buffers
Swap:  2096472k total,        0k used,  2096472k free,   363984k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 6612 root      15   0  2208  976  764 R  8.9  0.1   0:00.01 top
 6580 root      15   0  6580 1384 1168 S  0.0  0.1   0:00.02 bash
 6578 root      15   0  8572 2304 1844 R  8.9  0.2   0:00.06 sshd
 6389 gdm       15   0 51216  19m 9528 S  0.0  2.0   0:00.86 gdmgreeter
 6212 root      15   0  139m 8036 2488 S  0.0  0.8   0:00.25 X
 6191 root      16   0 12468 2292 1752 S  0.0  0.2   0:00.03 gdm-binary

また、「R」を押すことでソートの昇順、降順を変更できる。上記の状態から「R」を押すと以下のようにPIDの昇順に並べ変わる。

top - 09:32:47 up 6 min,  1 user,  load average: 0.01, 0.20, 0.13
Tasks:  81 total,   2 running,  79 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3% us,  1.0% sy,  0.0% ni, 98.7% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   1035556k total,   488320k used,   547236k free,    13820k buffers
Swap:  2096472k total,        0k used,  2096472k free,   364024k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      16   0  2840  552  472 S  0.0  0.1   0:01.31 init
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    3 root       5 -10     0    0    0 S  0.0  0.0   0:00.01 events/0
    4 root       7 -10     0    0    0 S  0.0  0.0   0:00.08 khelper
    5 root      15 -10     0    0    0 S  0.0  0.0   0:00.00 kacpid

起動オプション

主なオプション

topコマンドの主な起動オプションは以下のようになる。

オプション 説明
d スクリーンの更新間隔。
p 指定のプロセスIDのみの監視。20個まで指定できる。
q 遅延なしで更新を続ける。呼び出しがスーパーユーザー特権を持っていると、可能な最高の優先度で実行される。
S 累積モードとなる。各プロセスが、死んだ子プロセス分も含めて利用したCPU時間とともにリストされる。
s セキュアモードで動作させる。潜在的に危険な対話コマンドの事項を禁止する。
i idleなプロセスやゾンビプロセスを無視させる。
C それぞれのCPUの状態だけでなく全体のCPU統計も表示する。SMPシステムでしか意味が無い。
c コマンド名だけでなく、コマンドラインを表示する。デフォルトはこの動作となっている。
n 繰り返し回数。この回数だけ表示を更新して終了する。
b バッチモード。出力をtopから他のプログラムに送るときに指定する。

いくつか例を挙げる。

# top -p 1
top - 09:39:26 up 13 min,  1 user,  load average: 0.00, 0.08, 0.09
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0% us,  0.3% sy,  0.0% ni, 99.7% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   1035556k total,   536608k used,   498948k free,    14492k buffers
Swap:  2096472k total,        0k used,  2096472k free,   412708k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      16   0  2840  552  472 S  0.0  0.1   0:01.32 init

topの結果をバッチ処理として実行し、保管しておきたい場合には以下のようにバッチモードとして実行する。
普通はnオプションで実行回数を指定しておく。

# top -b -n 5 > temp.txt

また、更新間隔をあわせて指定するとより実用性が増す。

# top -b -n 5 -d 1  > temp.txt