【覚書き】topコマンドでcpu使用率を見る

# 初めに
社内の勉強会でwebサイトのパフォーマンス改善のハンズオンを行いました。
その際にtopコマンドを知ったので備忘のためにアウトプットします。

# 参考にした記事
こちらの記事を参考にさせていただきました！
ありがとうございます！
* [topコマンドの使い方](https://qiita.com/k0kubun/items/7368c323d90f24a00c2f)
* [Linux : topコマンドで表示される情報を理解する](https://qiita.com/tetoralynx/items/9bffce2c4d5dff10239d)

# topコマンドとは
topコマンドとは、サーバ全体の負荷を確認するコマンドのこと。
cpu使用率やメモリの使用率を確認することができる。

# topコマンド実行してみた
実行はtopと打つだけでOK。

```topコマンド実行
$ top
```

## topコマンド実行結果
実行すると以下のような情報がリアルタイムで表示される
```topコマンド実行結果
top - 22:32:31 up 13 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  29 total,   1 running,  28 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
MiB Mem :  15868.3 total,  14949.8 free,    504.9 used,    413.6 buff/cache
MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  15106.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    390 root      20   0  466596  77288  20280 S   0.0   0.5   0:02.41 python3.10
    142 root      20   0 1614436  50832  18336 S   0.0   0.3   0:00.68 snapd
    573 root      20   0   43756  37700   9920 S   0.0   0.2   0:01.62 python3
    207 root      20   0  107216  21092  12864 S   0.0   0.1   0:00.03 unattended-upgr
    136 root      20   0   30124  18912  10096 S   0.0   0.1   0:00.05 networkd-dispat
     87 systemd+  20   0   25260  12412   8472 S   0.0   0.1   0:00.06 systemd-resolve
      1 root      20   0  166896  12224   8036 S   0.0   0.1   0:00.65 systemd
     35 root      19  -1   31416  11272  10272 S   0.0   0.1   0:00.06 systemd-journal
    143 root      20   0   15324   7396   6444 S   0.0   0.0   0:00.06 systemd-logind
     60 root      20   0   22088   5924   4408 S   0.0   0.0   0:00.07 systemd-udevd
    522 root      20   0    6080   5056   3372 S   0.0   0.0   0:00.02 bash
    139 syslog    20   0  222400   5044   4220 S   0.0   0.0   0:00.00 rsyslogd
    504 root      20   0    6120   4988   3412 S   0.0   0.0   0:00.00 bash
    480 root      20   0    7476   4808   3896 S   0.0   0.0   0:00.00 login
    120 message+  20   0    8596   4428   3888 S   0.0   0.0   0:00.08 dbus-daemon
    618 root      20   0    7792   3688   3088 R   0.0   0.0   0:00.29 top
    362 root      20   0    4780   3344   3108 S   0.0   0.0   0:00.02 subiquity-serve
```
## 各行の説明
### 1行目：時間、ユーザ、load average
左から順に
・現在時刻
・サーバの稼働時間
・ログインユーザ数
・単位時間あたりの待ちタスク数（1分、5分、15分）
```
top - 22:32:31 up 13 min,  1 user,  load average: 0.00, 0.00, 0.00
```

### 2行目：タスク情報
左から順に
・合計タスク数
・稼働中のタスク数
・待機中のタスク数
・停止タスク数
・ゾンビタスク数
```
Tasks:  29 total,   1 running,  28 sleeping,   0 stopped,   0 zombie
```

### 3行目：cpu使用率
左から順に
・userプロセス（ユーザが起動したプロセス）
・systemプロセス（システムで起動してるプロセス）
・niceプロセス（優先プロセス）
・idleプロセス（何もしてないプロセス）
・I/O waitプロセス（cpuは使用してないけどioで待ちになっているプロセス）
・hardware interruptプロセス（cpu外部からの割り込みプロセス）
・software interruptプロセス（cpu内部からの割り込みプロセス）

```
%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のプロセスが表示される（16スレッドのCPUなので16個表示されているっぽい）
ほぼ全部0.0なので見ごたえないですね :upside_down:
```
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu8  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu9  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu10 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu11 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu12 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu13 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu14 :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu15 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
```


### 4,5行目：Memory/Swap
物理メモリとスワップメモリの使用メモリ量。一番左に書いてある「MiB」が単位
左から順に
・全メモリ量
・使用してないメモリ量
・使用中のメモリ量
・buff/cache：バッファ、キャッシュで使用されているメモリ量
・avail Mem ：新しいアプリがスワップせずに使えるメモリ量

```
MiB Mem :  15868.3 total,  14949.8 free,    504.9 used,    413.6 buff/cache
MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  15106.2 avail Mem
```

### 6行目以降：プロセス一覧
現在のプロセスの一覧が表示される。
各列の説明は以下の通り

・PID    ：プロセスID
・USER   ：そのユーザを実行してるユーザ
・PR     ：優先度。０を基準とした相対的な値
・VIRT   ：確保されている仮想メモリ量
・RES    ：使用している物理メモリ量
・SHR    ：他のプロセスと共有される可能性のあるメモリ量
・S      ：プロセスのステータス（Sはスリープ）
・%CPU   ：CPU使用率
・%MEM   ：メモリの使用率
・TIME+  ：プロセスの実行時間
・COMMAND：プロセスの実行コマンド名

```
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    390 root      20   0  466596  77288  20280 S   0.0   0.5   0:02.41 python3.10
    142 root      20   0 1614436  50832  18336 S   0.0   0.3   0:00.68 snapd
    573 root      20   0   43756  37700   9920 S   0.0   0.2   0:01.62 python3
    207 root      20   0  107216  21092  12864 S   0.0   0.1   0:00.03 unattended-upgr
    136 root      20   0   30124  18912  10096 S   0.0   0.1   0:00.05 networkd-dispat
```
`SHift + p`もしくは`SHift + m`でcpu、メモリの使用率でソート可能


# 最後に
ハンズオンではtopコマンドの結果を見ながらボトルネックになっている箇所を特定してチューニングを行いました。闇雲にチューニングしてもいい結果は得られないですね。
topコマンドこれからも使っていこうと思います。