Linux : topコマンドで表示される情報を理解する

#はじめに
会社の研修中にtopコマンドで実行中のプロセス一覧が見れることを教わりました。教わったことと調べたことを整理しつつ、topコマンドで表示される情報を理解するのが本記事の目的です。

こちらの記事を参考にしました
>https://qiita.com/k0kubun/items/7368c323d90f24a00c2f

#topコマンドとは
topコマンドは、そのシステムで実行されているプロセスの一覧を表示するlinuxコマンドです。システム全体の負荷や、プロセスごとのメモリ使用量などを見ることができます。

#topコマンドを実行してみる
topコマンドを実行するとシステムのプロセス情報が一度に表示されます。
![Screenshot from 2020-06-02 19-31-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636023/f960fb9c-510a-ebdc-2546-a67e0374e32c.png)
初心者目には情報が多いですが、少しづつ見ていきます。

##ヘッダー部分
画像での空行を区切りとして、そこから上部の部分をヘッダー部分として見ていきます。

###時間とユーザー数
```
top - 19:41:02 up  3:35,  1 user,  
```
一行目「top」と書かれている箇所の情報です。
左から

- 現在時間
- サーバーの稼働時間（「up 3:35」の部分。「時：分」表記）
- ログインユーザー数

となります。

###load average
```
load average: 0.52, 0.44, 0.53
```
一行目残りの部分の情報です。
この欄には、単位時間あたりの平均待ちタスク（プロセス）数が表示されています。小数が３つ並んでいますが、左から直近で「1分, 5分, 15分」間の単位時間あたり待ちタスク数となっています。
上の画像だと例えば、直近1分間の平均待ちタスク数は0.52タスク、ということになります。

###Tasks
```
Tasks: 387 total,   1 running, 315 sleeping,   0 stopped,   0 zombie
```
現在のタスクを状態ごとに見ることができます。

- total : 全タスク数
- running : 稼働中タスク数
- sleeping : 待機中タスク数
- stopped : 停止したタスク数
- zombie : ゾンビタスク数

#CPU
```
%Cpu(s):  2.9 us,  0.3 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
```
CPUの利用時間の割合をプロセスの種類ごとに見ることができます。上の画像では単位がありませんが、単位は「%」です。

- us : userプロセス
- sy : systemプロセス
- ni : niceプロセス
- id : idleプロセス
- wa : I/O waitプロセス
- hi : hardware interruptプロセス（interruptは「割り込み」という意味です）
- si : software interruptプロセス

（個々のプロセスがどういうプロセスなのかは他の機会に調べようと思います。）
画面で「1」を押すと、個々のCPUごとの情報に切り替えることができます。

```
%Cpu0  :  1.0 us,  0.0 sy,  0.0 ni, 98.3 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
%Cpu1  :  0.7 us,  0.0 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  1.4 us,  0.3 sy,  0.0 ni, 98.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.4 us,  0.7 sy,  0.0 ni, 98.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  1.0 us,  0.7 sy,  0.0 ni, 98.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
```

###Memory/Swap
```
KiB Mem :  7965864 total,   336044 free,  5603244 used,  2026576 buff/cache
KiB Swap:  2097148 total,  1692156 free,   404992 used.   800580 avail Mem 
```
物理メモリとスワップ領域の使用メモリ量が表示されています。「Mem」が物理領域、「Swap」がスワップ領域です。
スワップ領域については[こちら](https://wa3.i-3-i.info/word1721.html)のサイトがわかりやすかったです。

- total : 全メモリ量
- free : 使用していないメモリ量
- used : 使用中のメモリ量
- buff/cache : バッファ/キャッシュで使用されているメモリ量

最後の「avail Mem」は「新しいアプリがスワップせずに使えるメモリ量」です。

##プロセス一覧部分
```
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                 
 1407 sada      20   0  604828  92172  63112 S   2.0  1.2   6:17.70 Xorg                                                                                                                                    
 2196 sada      20   0 7374224 476924  53408 S   1.7  6.0   8:05.10 java                                                                                                                                    
 1537 sada      20   0 4039788 274080 115156 S   1.3  3.4   8:13.99 gnome-shell                                                                                                                             
 2768 sada      20   0 2008760 555128 310552 S   1.0  7.0   7:52.98 chrome                                                                                                                                  
12359 sada      20   0  849556  48752  34872 S   1.0  0.6   0:07.22 gnome-terminal- 
```
空行より下の部分には実行中のプロセス一覧が表示されます。

- PID : プロセスID
- USER : そのプロセスを実行しているユーザー
- PR : 優先度　0を基準とした、相対的な優先度です。負の値もあります。
- VIRT : 確保されている仮想メモリ量
- RES : 使用している物理メモリ量
- SHR : 他のプロセスと共有される可能性のあるメモリ量
- S : プロセスのステータス　アルファベットによって分類されています
    - D: 割り込み不能押すと
    - R: 実行中
    - S: スリープ状態
    - T: 停止中
    - Z: ゾンビプロセス
- %CPU : CPUの使用率
- %MEM : メモリの使用率
- TIME+ : プロセスの実行時間
- COMMAND : プロセスの実行コマンド名

このプロセス一覧では、「Shift + p」でCPU使用率順（%CPU）、「Shift + m」でメモリ使用率順（%MEM）に並べ替えることができます。
また画面上で「c」を押すと「COMMAND」の部分が絶対パスで表示されます。

メモリ使用率順で並び替えて、絶対パスを表示した画像がこちらです。
![Screenshot from 2020-06-02 20-51-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636023/b43a6c66-aba9-fe8e-c083-2972d59f0fd6.png)

#さいごに
topコマンドで表示されるプロセス一覧画面の見方をまとめました。
topコマンドには他にも便利な機能がたくさんあるようです。使いこなして、プロセス管理をスムーズに行っていきたいです。