topコマンドで覚えておきたい使い方14個
Pocket

topコマンドといえば、よくLinuxのパフォーマンス状態をモニタリングするために利用されているコマンドだ。
今回は、そんなtopコマンドで覚えておきたい使い方14個を紹介する。

なお、検証で使用したtopコマンドはCentOS 7 で利用している「procps-ng version 3.3.9」のものとなっている。

1.基本的な使い方

基本的には、オプション無しで以下のようにコマンドを実行する。

top

 

20150629_000002

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」という表記が出るので、そこで秒数を指定すればいい。

20150717_000001

3.実行されているコマンドの内容をフルパスにする

実行されているコマンドの内容をフルパスで出力させる場合は、「-c」オプションを付与する。

top -c

 

なお、topコマンド実行中でも切り替えは可能。
実行中の画面上で「c」キーを押下すると、以下のように画面が切り替わる。

<切り替え前>

20150717_000002

 

<切り替え後>

20150717_000003

4.表示させるプロセスのユーザ(uid)を指定する

「-u」もしくは「-U」オプションを指定することで、表示させるプロセスの実行ユーザを指定することが出来る。

top -u ユーザ名

 

もちろん、topコマンド実行中でも切り替えは可能。
実行中の画面上で「u」キーを押下すると、「Which user (blank for all)」という表示が出るので、そこに監視したいユーザ名を入力する。

<切り替え前>

20150717_000004

 

<切り替え後>

20150717_000005

Sponsored Links

5.表示されているプロセスをソートする

表示されているプロセスをソートする場合は、ソートする内容に応じて、実行画面上で以下のようにキーを押下する。

CPU順 Shift + p
メモリー順 Shift + m
実行時間順 Shift + t

 

その他、CentOS 7でインストールされているtopコマンドでは、「Shift + <>」でソートする列を切り替える事が可能だ。
なお、CentOS 6等の場合は、「Shift + O」でソート業を切り替えることが出来る。

20150717_000007

6.実行しているプロセスをツリー状に出力させる

これは、最近のバージョンのものに追加された機能のようだが、top画面実行中に「Shift + V」を実行することで、プロセスをツリー状に表示することが出来る。
(CentOS 6のtopコマンドでは利用出来なかった)

20150717_000006

「-c」と組み合わせて利用すると、より詳細な情報がわかる。

7.画面をハイライト表示させる

top画面実行中に「z」キーを押下することで、画面をハイライト表示させることが出来る。
(無論、htopほどキレイに表示されるわけではないが)

20150717_000009

 

「Shift + z」キーを利用すると、より詳細な設定を行う事が可能だ。

20150717_000010

8.プロセスをkillする

topコマンド実行中に「k」キーを実行することで、指定したPIDのプロセスをkillすることが出来る。
「PID to signal/kill」という表示がされるので、そこにkillしたいプロセスIDを入力する。

20150717_000012

9.プロセスを優先度を変更(renice)する

topコマンド実行中に「r」キーを実行することで、指定したPIDのnice値を変更することが出来る。
「PID to renice」という表示がされるので、そこにreniceをしたいプロセスIDを入力、次の画面で変更する値を入力する。

20150717_000014

10.topコマンドの画面更新回数を指定する

topコマンド実行時に「-n」オプションを実行することで、topコマンドの画面更新回数を制限することが出来る。

top -n 画面更新回数

11.topコマンドをbatchモードで実行する

topコマンド実行時に「-b」オプションを指定することで、コマンドをbatchモードで実行させることが出来る。
topコマンドの出力結果をテキストファイルに出力する際などに有効だろう。

top -b

12.CPUの使用率をコア数の数だけ出力させる

topコマンド実行中に「1」キーを押下することで、CPU全体でサマリーされていた使用率をコア数ごとに表示させることができる。

20150717_000015

13.プロセス表示を複数画面に分ける

topコマンド実行中に「Shift + A」を押下することで、プロセスの実行ステータスを複数ウィンドウに切り分ける事ができる。
プロセスウィンドウの操作の切り替えは、「a」キーを押下すると行える。

20150717_000017

14.topコマンドヘッダの表示/非表示を切り替える

topコマンドのヘッダは、コマンド実行中に表示/非表示を切り替える事が出来る。

1行目 l
2-3行目 t
4-5行目 m

ヘッダ全部消すと、こんな感じになる。

20150717_000018

 

というわけで、今回はtopコマンドで覚えていると便利な使い方を紹介した。
まだまだあまり知られていない使い方がたくさんあると思うので、把握でき次第追記していこう。

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)