topコマンドといえば、よくLinuxのパフォーマンス状態をモニタリングするために利用されているコマンドだ。
今回は、そんなtopコマンドで覚えておきたい使い方14個を紹介する。
なお、検証で使用したtopコマンドはCentOS 7 で利用している「procps-ng version 3.3.9」のものとなっている。
1.基本的な使い方
基本的には、オプション無しで以下のようにコマンドを実行する。
top
top - 07:21:06 up 4 days, 17 min, 4 users, load average: 0.00, 0.00, 0.00
Tasks: 186 total, 1 running, 185 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, 0.0%st
Mem: 3926176k total, 1642168k used, 2284008k free, 143240k buffers
Swap: 6160376k total, 0k used, 6160376k free, 923260k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19348 1528 1220 S 0.0 0.0 0:01.41 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.04 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.49 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
7 root RT 0 0 0 0 S 0.0 0.0 0:00.07 migration/1
8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/1
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
10 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
11 root 20 0 0 0 0 S 0.0 0.0 0:00.02 events/0
12 root 20 0 0 0 0 S 0.0 0.0 0:08.80 events/1
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuset
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 sync_supers
19 root 20 0 0 0 0 S 0.0 0.0 0:00.04 bdi-default
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kintegrityd/0
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kintegrityd/1
22 root 20 0 0 0 0 S 0.0 0.0 0:00.46 kblockd/0
23 root 20 0 0 0 0 S 0.0 0.0 0:01.11 kblockd/1
24 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpid
25 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpi_notify
26 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpi_hotplug
27 root 20 0 0 0 0 S 0.0 0.0 0:26.26 ata/0
それぞれの表示の意味について、上の5行分とそれ以降を分けて説明する。
1行目
top - 07:21:06 up 4 days, 17 min, 4 users, load average: 0.00, 0.00, 0.00
uptimeと同じ内容が出力される。
- 07:21:06 … 現在時刻
- up 4 days, 17 min, … 稼働時間(4日と17分稼働)
- 4 users … 現在のログインユーザ数(whoコマンドのユーザ数と同数)
- load average: 0.00, 0.00, 0.00 … 時間あたりの待機タスク数(1分間、5分間、15分間)
2行目
Tasks: 186 total, 1 running, 185 sleeping, 0 stopped, 0 zombie
タスクの状態が出力される。
- Tasks: 186 total … タスクの合計
- 1 running … 稼働中のタスク数
- 185 sleeping … 待機中のタスク数
- 0 stopped … 停止中のタスク数
- 0 zombie … ゾンビタスク数
3行目
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
CPUの状態を出力する。
- 0.0%us … ユーザプロセスの使用時間
- 0.0%sy … システムプロセスの使用時間
- 0.0%ni … 実行優先度を変更したユーザプロセスの使用時間
- 100.0%id … アイドル状態の時間
- 0.0%wa … I/Oの終了待をしている時間
- 0.0%hi … ハードウェア割込み要求での使用時間
- 0.0%si … ソフトウェア割込み要求での使用時間
- 0.0%st … OS仮想化利用時に、ほかの仮想CPUの計算で待たされた時間
4行目
Mem: 3926176k total, 1642168k used, 2284008k free, 143240k buffers
メモリーの状態を出力する。
- 3926176k total … メモリーの合計容量
- 1642168k used … 使用中のメモリー容量
- 2284008k free … 未使用のメモリー容量
- 143240k buffers … バッファとして使用されているメモリー容量
5行目
Swap: 6160376k total, 0k used, 6160376k free, 923260k cached
スワップ領域の状態を出力する。
- 6160376k total … スワップ領域の合計容量
- 0k used … 使用中のスワップ領域の容量
- 6160376k free … 未使用のスワップ領域の容量
- 923260k cached … キャッシュされているスワップ領域の容量
7行目以降
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19348 1528 1220 S 0.0 0.0 0:01.41 init
7行目以降は、実行中の各プロセスの状態を表している。
- PID … プロセスID
- USER … プロセスの実行ユーザ
- PR … プロセスの静的優先度(値が低い方が優先度が高い)
- NI … プロセスの相対優先度(0を基準とし、-20(優先度高) ~ 19(優先度低)で表している)
- VIRT … プロセスの仮想メモリーサイズ(スワップアウトしたメモリー使用量を加えたメモリー容量)
- RES … プロセスの使用しているメモリー容量(物理メモリー容量)
- SHR … プロセスの使用している共有メモリー容量
- S … プロセスの状態
- %CPU … CPU使用率
- %MEM … 物理メモリー使用率
- TIME+ … プロセスの実行時間
- COMMAND … プロセスで実行されているコマンド
出力されるS(プロセスの状態)のステータスの種類は、以下のようになっている。
- S … スリープ
- T … 停止中
- D … 割り込み不可(sleep)
- N … ナイス値がプラスの状態
- < … ナイス値がマイナスの状態
- R … 実行中
- Z … ゾンビ状態
- W … スワップアウト状態
2.情報が更新される間隔を指定する
topコマンドは通常3秒毎に表示を更新している。
この間隔を調整する場合は、topコマンド実行時に「-d」オプションで指定してやるといいだろう。
top -d 更新間隔(秒)
なお、topコマンド実行中でもこの更新間隔は指定出来る。
実行中の画面上で「d」もしくは「s」キーを押下すると、「Change delay from 3.0 to」という表記が出るので、そこで秒数を指定すればいい。
3.実行されているコマンドの内容をフルパスにする
実行されているコマンドの内容をフルパスで出力させる場合は、「-c」オプションを付与する。
top -c
なお、topコマンド実行中でも切り替えは可能。
実行中の画面上で「c」キーを押下すると、以下のように画面が切り替わる。
切り替え前
切り替え後
4.表示させるプロセスのユーザ(uid)を指定する
「-u」もしくは「-U」オプションを指定することで、表示させるプロセスの実行ユーザを指定することが出来る。
top -u ユーザ名
もちろん、topコマンド実行中でも切り替えは可能。
実行中の画面上で「u」キーを押下すると、「Which user (blank for all)」という表示が出るので、そこに監視したいユーザ名を入力する。
切り替え前
切り替え後
5.表示されているプロセスをソートする
表示されているプロセスをソートする場合は、ソートする内容に応じて、実行画面上で以下のようにキーを押下する。
種類 | キーバインド |
---|---|
CPU順 | Shift + p |
メモリー順 | Shift + m |
実行時間順 | Shift + t |
その他、CentOS 7でインストールされているtopコマンドでは、「Shift + <>
」でソートする列を切り替える事が可能だ。
なお、CentOS 6等の場合は、「Shift + O
」でソート業を切り替えることが出来る。
6.実行しているプロセスをツリー状に出力させる
これは、最近のバージョンのものに追加された機能のようだが、top画面実行中に「Shift + V」を実行することで、プロセスをツリー状に表示することが出来る。
(CentOS 6のtopコマンドでは利用出来なかった)
「-c」と組み合わせて利用すると、より詳細な情報がわかる。
7.画面をハイライト表示させる
top画面実行中に「z」キーを押下することで、画面をハイライト表示させることが出来る。
(無論、htopほどキレイに表示されるわけではないが)
「Shift + z
」キーを利用すると、より詳細な設定を行う事が可能だ。
8.プロセスをkillする
topコマンド実行中に「k」キーを実行することで、指定したPIDのプロセスをkillすることが出来る。
「PID to signal/kill」という表示がされるので、そこにkillしたいプロセスIDを入力する。
9.プロセスを優先度を変更(renice)する
topコマンド実行中に「r」キーを実行することで、指定したPIDのnice値を変更することが出来る。
「PID to renice」という表示がされるので、そこにreniceをしたいプロセスIDを入力、次の画面で変更する値を入力する。
10.topコマンドの画面更新回数を指定する
topコマンド実行時に「-n」オプションを実行することで、topコマンドの画面更新回数を制限することが出来る。
top -n 画面更新回数
11.topコマンドをbatchモードで実行する
topコマンド実行時に「-b」オプションを指定することで、コマンドをbatchモードで実行させることが出来る。
topコマンドの出力結果をテキストファイルに出力する際などに有効だろう。
top -b
12.CPUの使用率をコア数の数だけ出力させる
topコマンド実行中に「1」キーを押下することで、CPU全体でサマリーされていた使用率をコア数ごとに表示させることができる。
13.プロセス表示を複数画面に分ける
topコマンド実行中に「Shift + A」を押下することで、プロセスの実行ステータスを複数ウィンドウに切り分ける事ができる。
プロセスウィンドウの操作の切り替えは、「a」キーを押下すると行える。
14.topコマンドヘッダの表示/非表示を切り替える
topコマンドのヘッダは、コマンド実行中に表示/非表示を切り替える事が出来る。
場所 | キー |
---|---|
1行目 | l |
2-3行目 | t |
4-5行目 | m |
ヘッダ全部消すと、こんな感じになる。
というわけで、今回はtopコマンドで覚えていると便利な使い方を紹介した。
まだまだあまり知られていない使い方がたくさんあると思うので、把握でき次第追記していこう。