TOPコマンドは、Linuxのタスク状況を表示させることができるコマンドです。
サーバの状況把握をする場合に使用することが多く、デフォルトで5秒毎に、情報を更新し表示します。
今日はよく使うTOPコマンドの見方をまとめておきたいと思います。
まずは、TOPコマンドを実行してみましょう。
[html autolinks=”true”]# TOP[/html]
では以下の結果が表示されると思います。
1行目から順番に見て行きましょう。
[html autolinks=”true”]
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
[/html]
1行目
[html autolinks=”true”]top – 10:48:14 up 4 days, 15:40, 1 user, load average: 0.00, 0.00, 0.00[/html]
・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行目
[html autolinks=”true”]Tasks: 85 total, 3 running, 82 sleeping, 0 stopped, 0 zombie
[/html]
存在するタスクの状態を表示しています。各項目の内容は次のとおり。
・total : タスクの合計数
・running : 稼働中のタスク数
・sleeping : 待機中のタスク数
・stopped : 停止タスク数
・zombie : ゾンビタスク数
3行目
[html autolinks=”true”]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[/html]
CPUの利用時間についての情報を占有時間の割合で表示しています。
us : ユーザプロセスの使用時間
sy : システムプロセスの使用時間
ni : 実行優先度を変更したユーザプロセスの使用時間
id : アイドル状態の時間
wa : I/Oの終了待をしている時間
hi : ハードウェア割込み要求での使用時間
si : ソフトウェア割込み要求での使用時間
4行目
[html autolinks=”true”]Mem: 786608k total, 695072k used, 91536k free, 98364k buffers
[/html]
物理メモリの使用状況についての情報を表示しています。各項目の内容は次のとおり。
total : メモリ合計量
used : 使用中のメモリ量
free : 未使用のメモリ量
buffers : バッファに使用されているメモリ量
5行目
[html autolinks=”true”]Swap: 1605624k total, 32k used, 1605592k free, 473472k cached
[/html]
スワップ領域の使用状況を表示しています。各項目の内容は次のとおり。
total : スワップ領域の合計量
used : 使用中のスワップ領域
free : 未使用のスワップ領域
cached : キャッシュされているスワップ領域
6行目以下
[html autolinks=”true”]
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
[/html]
実行中のタクス(プロセス)の詳細を表示しています。各項目の内容は次のとおり。
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コマンドのオプション
[html autolinks=”true”]# top -d 2[/html]
dオプションで、更新間隔の指定をします。上の場合は2秒で画面更新がされます。
デフォルトは5秒。
[html autolinks=”true”]# top -p 17 [/html]
pオプションで、pidの指定をします。17のようにpid番号を指定。
[html autolinks=”true”]# top -c[/html]
cオプションは、コマンド名だけでなく、コマンドラインを表示します。
よって、より詳細な実行コマンドがわかります。
[html autolinks=”true”]#top -b [/html]
bオプションで、パッチモードになる。他のプロセスの結果を渡せるようになります。
TOPの実行結果のソート順変更
通常は、CPU使用率でソートされていますが、TOP結果画面で「shift+o」でソート順選択画面に切り替わり、選択が可能です。アルファベットで指定してenter でOK!
[html autolinks=”true”]
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>
[/html]
情報を非表示にしよう。
1~5行目の情報は、表示/非表示の切替が可能です。
トグルキーで実行します。
l 時刻からロードアベレージの情報。(1行目)
t CPU関連の情報。(2~3行目)
m メモリ関連の情報。(4~5行目)
対話コマンドを使おう
h ヘルプ
space 表示を更新する。指定の実行間隔以外で即時に今の状態に変更する。
k プロセスをkillする。
n 表示するプロセス数を変更する。プロンプトが出るので表示する数を入れる。
q 対話コマンドを終了する。
特に、k プロセスのkillは使用する機会が多いかもしれません。
やってみましょう。
[html autolinks=”true”]#top[/html]
#結果が出たらその画面で、k を押す。
すると、6行目に「PID to kill: 」が表示される。
[html autolinks=”true”]
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
[/html]
TOPの結果をログとして残そう。
結果をパッチ処理して残す事も出来る。
[html autolinks=”true”]# top -b -n 5 > temp.txt[/html]
更新間隔も一緒に入れよう。
[html autolinks=”true”]# top -b -n 5 -d 1 > temp.txt[/html]
参照
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/