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