topコマンドの話
こんにちは。ネットアシストのsです。
サーバで異常が発生した際の状況把握のため、
よく利用するコマンドの中に「top」コマンドというものがあります。
…よく利用するというか、サーバ管理には必須なコマンドですね。
使わない日は無いと思います。
かなりの初心者向けの内容となってしまいますが、
本日はこのtopコマンドを少し紹介いたします。
topコマンドとは…
サーバ上で実行されているプロセスの稼働状況を確認できます。
一定時間で情報が更新されていきますので、ほぼリアルタイムで状況を把握することが可能です。
まずは、コンソールで叩いてみましょう。
$ top
top - 12:13:35 up 119 days, 19:29, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 101 total, 1 running, 100 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, 0.0 st
KiB Mem : 1882460 total, 833584 free, 806116 used, 242760 buff/cache
KiB Swap: 1679356 total, 1505020 free, 174336 used. 908044 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30894 root 20 0 161888 2208 1552 R 0.7 0.1 0:00.12 top
1056 root 20 0 574196 696 256 S 0.3 0.0 26:32.17 tuned
1527 mysql 20 0 1306376 40140 2696 S 0.3 2.1 97:20.27 mysqld
1 root 20 0 191064 2744 1584 S 0.0 0.1 9:19.03 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:01.54 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 1:06.68 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 26:43.54 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 2:11.10 watchdog/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.07 kdevtmpfs
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
15 root 20 0 0 0 0 S 0.0 0.0 0:10.29 khungtaskd
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 edac-poller
24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 watchdogd
30 root 20 0 0 0 0 S 0.0 0.0 5:58.77 kswapd0
31 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
32 root 39 19 0 0 0 S 0.0 0.0 0:36.21 khugepaged
33 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto
41 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld
43 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kmpath_rdacd
こんな感じで表示されます。
これが、デフォルトでは3秒毎に更新されていきます。
上段から、ざっくりと見方を簡単に解説します。
■サーバの稼働状況
top - 12:13:35 up 119 days, 19:29, 1 user, load average: 0.00, 0.01, 0.05
現在時刻やログインユーザ数、サーバの負荷状況等がわかります。uptimeコマンドでも確認可能ですね。
■稼働タスク(プロセス数)状況
Tasks: 101 total, 1 running, 100 sleeping, 0 stopped, 0 zombie
稼働タスク数が表示されています。
タスクの種類は下記のようになっています。
合計タスク数、稼働中タスク、待機中タスク、停止タスク、ゾンビタスク
■CPU使用状況
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
各使用時間の割合が確認できます。
user :ユーザプロセス使用時間の割合 system :システムプロセス使用時間の割合 nice :nice値(優先度)を設定されたプロセス使用時間の割合 idle :アイドル状態(何もしていない)時間の割合 I/O wait :読み込み/書き込みオペレーションの完了待ち時間の割合 hardware interrupt:ハードウェア割り込み時間の割合 software interrupt:ソフトウェア割り込み時間の割合 steal :CPUリソースを他サーバに割かれてしまい割り当てられなかった時間の割合
「1」キーを押すことで搭載CPUごとの使用率を確認することができます。
CPUを4つ積んでいるサーバはこんな感じで表示されます。
top - 14:20:26 up 141 days, 3:52, 3 users, load average: 0.86, 0.38, 0.29
Tasks: 504 total, 2 running, 502 sleeping, 0 stopped, 0 zombie
%Cpu0 : 6.4 us, 4.3 sy, 0.0 ni, 85.1 id, 0.0 wa, 0.0 hi, 4.3 si, 0.0 st
%Cpu1 : 2.2 us, 2.2 sy, 0.0 ni, 93.5 id, 0.0 wa, 0.0 hi, 2.2 si, 0.0 st
%Cpu2 : 2.1 us, 4.3 sy, 0.0 ni, 91.5 id, 0.0 wa, 0.0 hi, 2.1 si, 0.0 st
%Cpu3 : 4.2 us, 4.2 sy, 0.0 ni, 89.6 id, 0.0 wa, 0.0 hi, 2.1 si, 0.0 st
■メモリ・スワップ利用状況
KiB Mem : 1882460 total, 833584 free, 806116 used, 242760 buff/cache
KiB Swap: 1679356 total, 1505020 free, 174336 used. 908044 avail Mem
freeコマンドでも確認可能ですね。
ここではキロバイト単位で、使用量・空き容量が確認できます。
■プロセス一覧
上記ヘッダの下にずらりと並んでいるのが稼働中プロセスの一覧です。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4158 centos 20 0 156616 2556 1200 S 0.3 0.5 0:00.01 sshd
1 root 20 0 46068 6464 4132 S 0.0 1.3 0:02.93 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u30:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.26 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
15 root 20 0 0 0 0 S 0.0 0.0 0:00.01 xenwatch
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xenbus
17 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kworker/0:1
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
25 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
26 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 edac-poller
27 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 watchdogd
32 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
33 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
34 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto
42 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld
43 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u30:1
44 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kmpath_rdacd
45 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kaluad
46 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kpsmoused
デフォルトではCPU使用率順に並んでいますが、下記操作でソートすることができます。
Shift+m メモリ使用率順にソート(%MEM)
Shift+p CPU使用率順にソート(%CPU)
Shift+t 実行時間順
プロセスIDやどのユーザが実行しているか等の詳細を確認することができます。
PID :プロセスID USER :実行ユーザ名 PR :プロセスの優先度 NI :プロセスの相対優先度 VIRT :プロセスが使用している仮想メモリ容量 RES :プロセスが使用している物理メモリ容量 SHR :プロセスが使用している共有メモリ容量 S :プロセスの状態 %CPU :CPU使用率 %MEM :メモリ使用率 TIME+ :実行時間 COMMAND:実行されているコマンド
■便利なオプションたち
個人的にはあまり使ったことがないのですが、オプションもありますのでいくつか紹介します。
- -p オプション
引数に特定のプロセスIDを指定することで、そのプロセスのみ確認ができます。
$ top -p 1
top - 08:44:59 up 1:29, 1 user, load average: 0.00, 0.01, 0.02
Tasks: 1 total, 0 running, 1 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
KiB Mem : 497116 total, 270660 free, 89964 used, 136492 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 359976 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 46068 6464 4132 S 0.0 1.3 0:03.00 systemd
単にtopを流しておくだけでは、表示されるプロセスがどんどん変わっていってしまうので
特定のプロセスだけ確認したいというときに便利です。
- -cオプション
実行中のプロセス名やコマンドをフルで表示させます。
$ top
top - 14:56:18 up 36 days, 22:25, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 81 total, 1 running, 80 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
KiB Mem : 1014848 total, 274356 free, 141624 used, 598868 buff/cache
KiB Swap: 4198396 total, 4198396 free, 0 used. 703580 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125356 3888 2596 S 0.0 0.4 2:05.69 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.30 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:12.06 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 5:08.35 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:23.87 watchdog/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
15 root 20 0 0 0 0 S 0.0 0.0 0:00.73 khungtaskd
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 edac-poller
24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 watchdogd
30 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
31 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
32 root 39 19 0 0 0 S 0.0 0.0 0:18.23 khugepaged
33 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto
41 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld
42 root 20 0 0 0 0 S 0.0 0.0 0:19.12 kworker/u2:1
43 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kmpath_rdacd
44 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kaluad
45 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kpsmoused
これが
↓
こうなります
$ top -c
top - 14:56:24 up 36 days, 22:25, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 81 total, 1 running, 80 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1014848 total, 274356 free, 141624 used, 598868 buff/cache
KiB Swap: 4198396 total, 4198396 free, 0 used. 703580 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125356 3888 2596 S 0.0 0.4 2:05.69 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
2 root 20 0 0 0 0 S 0.0 0.0 0:00.30 [kthreadd]
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H]
6 root 20 0 0 0 0 S 0.0 0.0 0:12.06 [ksoftirqd/0]
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 [migration/0]
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcu_bh]
9 root 20 0 0 0 0 S 0.0 0.0 5:08.35 [rcu_sched]
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [lru-add-drain]
11 root rt 0 0 0 0 S 0.0 0.0 0:23.87 [watchdog/0]
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [kdevtmpfs]
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [netns]
15 root 20 0 0 0 0 S 0.0 0.0 0:00.73 [khungtaskd]
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [writeback]
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kintegrityd]
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [bioset]
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [bioset]
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [bioset]
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kblockd]
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [md]
23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [edac-poller]
24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [watchdogd]
30 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [kswapd0]
31 root 25 5 0 0 0 S 0.0 0.0 0:00.00 [ksmd]
32 root 39 19 0 0 0 S 0.0 0.0 0:18.23 [khugepaged]
33 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [crypto]
41 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kthrotld]
42 root 20 0 0 0 0 S 0.0 0.0 0:19.12 [kworker/u2:1]
43 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kmpath_rdacd]
44 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kaluad]
45 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kpsmoused]
ちなみに…top実行中に「c」を押下するだけで、同様にプロセスがフルパスで確認することができます。
こっちの方が簡単ですね。
- -d オプション
デフォルトでは3秒毎に更新されていますが、引数に数字を指定することで
その秒数毎の更新に変更できます。
$ top -d 5
top - 14:36:51 up 36 days, 22:05, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 81 total, 1 running, 80 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 1014848 total, 274480 free, 141592 used, 598776 buff/cache
KiB Swap: 4198396 total, 4198396 free, 0 used. 703612 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1024 root 20 0 499496 15240 5276 S 0.2 1.5 63:25.50 f2b/server
1029 root 20 0 250596 7864 4896 S 0.2 0.8 3:32.10 httpd
9983 root 20 0 0 0 0 S 0.2 0.0 0:00.03 kworker/0:2
1 root 20 0 125356 3888 2596 S 0.0 0.4 2:05.66 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.30 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:12.05 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 5:08.14 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:23.87 watchdog/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
15 root 20 0 0 0 0 S 0.0 0.0 0:00.73 khungtaskd
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 edac-poller
24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 watchdogd
30 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
31 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
32 root 39 19 0 0 0 S 0.0 0.0 0:18.22 khugepaged
33 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto
41 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld
42 root 20 0 0 0 0 S 0.0 0.0 0:19.11 kworker/u2:1
静画だと伝わらないですね、、
なお、top実行中でもdまたはsを入力することで変更することができます。
top - 08:49:55 up 1:34, 1 user, load average: 0.00, 0.01, 0.02
Tasks: 81 total, 2 running, 79 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
KiB Mem : 497116 total, 270656 free, 89968 used, 136492 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 359972 avail Mem
Change delay from 3.0 to 5
「Change delay from 3.0 to」と表示されるので、その後ろに秒数を指定します。
————
まだまだ便利な使い方はありますが、今回はこの辺にしておきます。
使い方を覚えて、的確にサーバ状況を把握できるようにしましょう!
最後までお読みいただきありがとうございました。