TOPコマンドを使いこなす!




投稿日:

TOPコマンドは、Linuxのタスク状況を表示させることができるコマンドです。
サーバの状況把握をする場合に使用することが多く、デフォルトで5秒毎に、情報を更新し表示します。
今日はよく使うTOPコマンドの見方をまとめておきたいと思います。
   

まずは、TOPコマンドを実行してみましょう。


# TOP

 
では以下の結果が表示されると思います。
1行目から順番に見て行きましょう。
 

top - 10:48:14 up 4 days, 15:40,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  85 total,   3 running,  82 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:    786608k total,   695072k used,    91536k free,    98364k buffers
Swap:  1605624k total,       32k used,  1605592k free,   473472k cached

   

1行目


 

top - 10:48:14 up 4 days, 15:40,  1 user,  load average: 0.00, 0.00, 0.00

 

・10:48:14 :現在時間
・up 4 days, 15:40, :稼働時間
・1 user, :ログインユーザ数
・load average: 0.00, 0.00, 0.00:ロードアベレージは、実行待ちジョブの平均数1分前、5分前、15分前 をそれぞれ指します。
 
サーバが重い場合や、障害調査をしているときは、特にロードアベレージのジョブ数が溜まっていないかを確認します。
参照リンクによると、ここに出るジョブは、CPUの処理を待っているものだけではなく、IO処理を待っているものも含まれるのだそうです。よって、ここの待ちジョブ数がある場合は、その原因がCPU側かIO側かの判断をしなくてはいけません。

   

2行目


 

Tasks:  85 total,   3 running,  82 sleeping,   0 stopped,   0 zombie

 

存在するタスクの状態を表示しています。各項目の内容は次のとおり。 

・total : タスクの合計数
・running : 稼働中のタスク数
・sleeping : 待機中のタスク数
・stopped : 停止タスク数
・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の利用時間についての情報を占有時間の割合で表示しています。 

us : ユーザプロセスの使用時間
sy : システムプロセスの使用時間
ni : 実行優先度を変更したユーザプロセスの使用時間
id : アイドル状態の時間
wa : I/Oの終了待をしている時間
hi : ハードウェア割込み要求での使用時間
si : ソフトウェア割込み要求での使用時間

   

4行目


 

Mem:    786608k total,   695072k used,    91536k free,    98364k buffers

 
物理メモリの使用状況についての情報を表示しています。各項目の内容は次のとおり。
 
total : メモリ合計量
used : 使用中のメモリ量
free : 未使用のメモリ量
buffers : バッファに使用されているメモリ量
   

5行目


 

Swap:  1605624k total, 32k used,  1605592k free,   473472k cached

 

スワップ領域の使用状況を表示しています。各項目の内容は次のとおり。 

total : スワップ領域の合計量
used : 使用中のスワップ領域
free : 未使用のスワップ領域
cached : キャッシュされているスワップ領域
   

6行目以下


 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      15   0  2176  648  552 S  0.0  0.1   0:00.22 init
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.05 ksoftirqd/0
    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    5 root      10  -5     0    0    0 S  0.0  0.0   0:00.01 events/0

 
実行中のタクス(プロセス)の詳細を表示しています。各項目の内容は次のとおり。
 
PID : プロセス識別番号
USER : プロセスを実行しているユーザ
PR : 優先度
NI : 相対的優先度(-20(最高)縲鰀19(最低))
VIRT: プロセスの仮想メモリサイズ(スワップアウトしたメモリ使用量を加えたメモリ量)
RES : プロセスが使用している物理(スワップされていない)メモリサイズ
SHR : プロセスが使用している共有メモリ
S : プロセスの状態(状態の詳細については*1)
%CPU: CPU使用率
%MEM : 実メモリ使用率
TIME+ : プロセスの実行時間(秒)
COMMAND : 現在実行中のコマンド名
 

*1 プロセスの状態

S(スリープ状態)
T (停止中)
D (割り込み不可(sleep))
N (ナイス値がプラスの状態)
< (ナイス値がマイナスの状態) R (実行中) Z (ゾンビ状態) W (スワップアウト状態) プロセスの状態がどうなっているかは、サーバの状態を見る上で一番有用であり重要な情報です。 特に、zやwのような状態であれば手を打つ必要があるでしょう。 【追加】 プロセスが暴走状態になっている状態では、ゾンビやスワップアウト状態と表示されることはありません。 スリープ状態になっていることが殆どです。    

TOPコマンドのオプション


  

# top -d 2

dオプションで、更新間隔の指定をします。上の場合は2秒で画面更新がされます。
デフォルトは5秒。
  

# top -p 17 

pオプションで、pidの指定をします。17のようにpid番号を指定。
  

# top -c

cオプションは、コマンド名だけでなく、コマンドラインを表示します。
よって、より詳細な実行コマンドがわかります。
  

#top -b 

bオプションで、パッチモードになる。他のプロセスの結果を渡せるようになります。

   

TOPの実行結果のソート順変更


 
通常は、CPU使用率でソートされていますが、TOP結果画面で「shift+o」でソート順選択画面に切り替わり、選択が可能です。アルファベットで指定してenter でOK!
 

Current Sort Field:  K  for window 1:Def
Select sort field via field letter, type any other key to return 

  a: PID        = Process Id
  b: PPID       = Parent Process Pid
  c: RUSER      = Real user name
  d: UID        = User Id
  e: USER       = User Name
  f: GROUP      = Group Name
  g: TTY        = Controlling Tty
  h: PR         = Priority
  i: NI         = Nice value
  j: P          = Last used cpu (SMP)
* K: %CPU       = CPU usage
  l: TIME       = CPU Time
  m: TIME+      = CPU Time, hundredths
  n: %MEM       = Memory usage (RES)
  o: VIRT       = Virtual Image (kb)
  p: SWAP       = Swapped size (kb)
  q: RES        = Resident size (kb)
  r: CODE       = Code size (kb)
  s: DATA       = Data+Stack size (kb)
  t: SHR        = Shared Mem size (kb)
  u: nFLT       = Page Fault count
  v: nDRT       = Dirty Pages count
  w: S          = Process Status
  x: COMMAND    = Command name/line
  y: WCHAN      = Sleeping in Function
  z: Flags      = Task Flags <sched.h>

   

情報を非表示にしよう。


 
1~5行目の情報は、表示/非表示の切替が可能です。
トグルキーで実行します。
 
l   時刻からロードアベレージの情報。(1行目)
t   CPU関連の情報。(2~3行目)
m   メモリ関連の情報。(4~5行目)
   

対話コマンドを使おう


 
h   ヘルプ
space  表示を更新する。指定の実行間隔以外で即時に今の状態に変更する。
k   プロセスをkillする。
n   表示するプロセス数を変更する。プロンプトが出るので表示する数を入れる。
q   対話コマンドを終了する。
 
特に、k プロセスのkillは使用する機会が多いかもしれません。
やってみましょう。
 

#top

 
#結果が出たらその画面で、k を押す。
すると、6行目に「PID to kill: 」が表示される。
 

Mem:    786608k total,   695688k used,    90920k free,    98788k buffers
Swap:  1605624k total,       32k used,  1605592k free,   473596k cached
PID to kill: 
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                               
    1 root      15   0  2176  648  552 S  0.0  0.1   0:00.22 init     

   

TOPの結果をログとして残そう。


 
結果をパッチ処理して残す事も出来る。

# top -b -n 5 > temp.txt

 
更新間隔も一緒に入れよう。

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

   

参照


 
manページ
 
topコマンドの使い方 – No:124 – Linuxで自宅サーバ構築(新森からの雑記)
http://www.uetyi.mydns.jp/wordpress/command/entry-124.html

 
topコマンドでロードアベレージを見る | b.l0g.jp
http://b.l0g.jp/dev/top-loadaverag/