テックブログ

技術ネタ

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」と表示されるので、その後ろに秒数を指定します。

————

まだまだ便利な使い方はありますが、今回はこの辺にしておきます。
使い方を覚えて、的確にサーバ状況を把握できるようにしましょう!

最後までお読みいただきありがとうございました。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください