Linuxのtopコマンドでサーバーの稼働状況を確認する

# 環境

+ OS：CentOS Linux release 7.7.1908

```
[root@CENTOS7 ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@CENTOS7 ~]#
```


# 1. topコマンド
`top`コマンドで、CPUやメモリの使用率などの詳細情報をプロセスごとに一覧で確認することができるます。
デフォルトで`top`コマンドは現在実行中のプロセスをCPU使用率が高い順に表示します。表示はリアルタイムで更新され、`q`を入力すると終了します。

```:topコマンド書式
top [オプション]
```

topコマンドの主なオプション

|オプション|内容|
|:--------|:---|
|-d 間隔|更新する間隔を「ss.tt秒」で指定する|
|-n 回数|表示を繰り返す回数を指定する|
|-b|バッチモード。キー操作を受け付けず、「-n」で指定された回数または「CTRL+C」などで強制終了（kill）されるまで実行を続ける<br/>topの結果をファイルに保存する際などに役立つ|
|-s|セキュアモードで動作（起動中に「d」などを受け付けなくなる）|
|-U ユーザー<br/>-u ユーザー|監視するユーザーを名前またはIDで指定|
|-p プロセスID|監視するプロセスIDを指定。「-p 番号 -p 番号」または「-p 番号, 番号」のように複数指定できる（空白は省略可能）|
|-c|COMMAND欄（右端）を、プログラム名の表示とコマンドラインの表示のどちらにするか切り替える（起動後は「c」で切り替え）|
|-i|何も実行していないアイドルプロセスを表示するか、しないかを切り替える（起動後は「i」で切り替え）|
|-S|累積時間モード（起動後は「S」で切り替え）|
|-o 項目|出力の並べ替えに使用する項目（デフォルトはCPU使用率）を指定。指定できる項目名は「top -O」で確認 <br/>例えば使用メモリ（物理メモリの占有率）が大きい順に表示したい場合、「top -o %MEM」とする|
|-w 桁数|出力の幅|


# 2. インタラクティブなtopコマンド

`top`コマンド実行中に以下のインタラクティブなコマンドを使用できます。

|コマンド|詳細|
|:------|:---|
|Enter、Space|表示を最新の情報に直ちに更新します。|
|h|インタラクティブコマンドのヘルプ画面を表示します。|
|h、?|ウィンドウおよびフィールドグループのヘルプ画面を表示します。|
|k|プロセスを kill します。プロセス ID およびプロセスに送信するシグナルがプロンプトされます。|
|n|表示されるプロセス番号を変更します。番号を入力するようプロンプトされます。|
|u|一覧をユーザー別に並べ替えます。|
|M|一覧をメモリ使用率で並べ替えます。|
|P|一覧を CPU 使用率で並べ替えます。|
|q|ユーティリティーを終了して、シェルプロンプトに戻ります。|

# 3. topコマンドの出力結果の見方

`top`コマンドで以下のように表示されます。

```console:topコマンドの出力結果
top - 16:29:43 up 21:14,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  97 total,   1 running,  96 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 :  1014820 total,   401940 free,   187588 used,   425292 buff/cache
KiB Swap:  1679356 total,  1679356 free,        0 used.   676612 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0  128040   6712   4176 S  0.0  0.7   0:03.53 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
    4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    5 root      20   0       0      0      0 S  0.0  0.0   0:00.19 kworker/u2:0
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.91 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   0:00.90 rcu_sched
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-dra+
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.95 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.03 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
```

### 1行目（top～）の表示内容
1行目には「現在時刻」「稼働時間」「ログインユーザー数」「ロードアベレージ」が表示されます。

```:1行目の表示内容
top - 16:29:43 up 21:14,  1 user,  load average: 0.00, 0.01, 0.05
```


|項目|内容|
|:---|:---|
|16:29:43|現在時刻（16時29分43秒）|
|up 21:14|稼働時間（21時間14分）|
|1 user|ログインユーザー数（1ユーザーがログイン中）|
|load average: 0.00, 0.01, 0.05|過去1、5、15分間のロードアベレージ|

### 2行目（Tasks:～）の表示内容
2行目にはタスクの状態が表示されます。

```:2行目の表示内容
Tasks:  97 total,   1 running,  96 sleeping,   0 stopped,   0 zombie
```


|項目|内容|
|:---|:---|
|total|タスクの合計数|
|running|稼働中のタスク数|
|sleeping|待機中のタスク数|
|stopped|停止タスク数|
|zombie|ゾンビタスク数|


### 3行目（%Cpu(s):～）の表示内容
3行目はCPUの状態が表示されます。

```:3行目の表示内容
%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
```

|項目|内容|
|:---|:---|
|us|ユーザープロセスの使用時間の割合|
|sy|システムプロセスの使用時間の割合|
|ni| 実行優先度を変更したユーザプロセスの使用時間の割合|
|id|アイドル状態の時間の割合|
|wa|I/Oの終了待をしている時間の割合|
|hi|ハードウェア割込み要求での使用時間の割合|
|si|ソフトウェア割込み要求での使用時間の割合|
|st|OS仮想化利用時に、ほかの仮想CPUの計算で待たされた時間の割合|

### 4行目（KiB Mem :）の表示内容
4行目はメモリの状態が表示されます。

```:4行目の表示内容
KiB Mem :  1014820 total,   401940 free,   187588 used,   425292 buff/cache
```

|項目|内容|
|:---|:---|
|total|メモリの合計容量|
|free|未使用のメモリ容量|
|used|使用中のメモリ容量|
|buff/cache|バッファキャッシュ/ページキャッシュとして割り当てられたメモリ容量|


### 5行目（KiB Swap:）の表示内容
5行目はスワップ領域の状態が表示されます。

```:5行目の表示内容
KiB Swap:  1679356 total,  1679356 free,        0 used.   676612 avail Mem
```

|項目|内容|
|:---|:---|
|total|スワップ領域の合計容量|
|free|未使用のスワップ領域の容量|
|used|使用中のスワップ領域の容量|
|avail Mem|新しいアプリがスワップせずに使えるメモリ容量|

### 7行目以降の表示内容
7行目以降は、実行中の各プロセスの状態が表示されます。

```:7行目以降の表示内容
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0  128040   6712   4176 S  0.0  0.7   0:03.53 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
    4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    5 root      20   0       0      0      0 S  0.0  0.0   0:00.19 kworker/u2:0
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.91 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   0:00.90 rcu_sched
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-dra+
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.95 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.03 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
```

|項目|内容|
|:---|:---|
|PID|プロセスID|
|USER|プロセスの実行ユーザー|
|PR|プロセスの静的優先度（数字が低い程優先度は高い）|
|NI|プロセスの相対優先度（0を基準とし、-20（優先度高）～19（優先度低）で表している）|
|VIRT|プロセスの仮想メモリサイズ(スワップアウトしたメモリ使用量を加えたメモリ容量)|
|RES|プロセスが使用しているメモリ容量(物理メモリ容量)|
|SHR|プロセスが使用している共有メモリ容量|
|S|プロセスの状態<br/>D：割り込み不可（sleep）<br/>R：実行中<br/>S：スリープ状態<br/>T：停止中（ジョブ制御信号により停止）<br/>t：停止中（トレース中にデバッガーにより停止）<br/>Z：ゾンビ状態|
|%CPU|CPU使用率|
|%MEM|物理メモリ使用率|
|TIME+|プロセスのCPU使用時間|
|COMMAND|現在実行中のコマンド名|

---

以上