top コマンドでよく使う or 便利そうな機能

# ■ はじめに

top コマンドと言えば、リソースの状況確認に使えるコマンドですが、実は結構多機能です。今回は、個人的によく使う機能や便利そうだと思う機能を調べたので、まとめました。

対象バージョンは次のとおりです。

```console
$ top -v
procps-ng version 3.3.10
```

# ■ ヘルプ ( <kbd>h</kbd> or <kbd>?</kbd> )

top コマンド実行中に <kbd>h</kbd> or <kbd>?</kbd> で、ヘルプを表示できます。top コマンドを終了させずに対話型のコマンドを確認できるので、非常に便利です。

# ■ 文字列検索 ( <kbd>L</kbd> )

top コマンド実行中に「<kbd>L</kbd> -> **文字列入力** -> <kbd>Enter</kbd>」で、ヒットした文字列を含むプロセスを上部に表示できます。ヒット部分はハイライトされます。

実行例1 (入力キー: <kbd>L</kbd>,"cpu",<kbd>Enter</kbd>, <kbd>L</kbd>,"bash",<kbd>Enter</kbd>, <kbd>L</kbd>,"20",<kbd>Enter</kbd>)
実行例1 (入力キー: L,"cpu",Enter,L,"bash",Enter,L,"20",Enter)
![5_search.gif](https://qiita-image-store.s3.amazonaws.com/0/283234/d95a25e8-bdf8-841a-1b67-95e12a1ef24d.gif)

# ■ ユーザ毎に監視 ( <kbd>u</kbd> )

top コマンド実行中に「<kbd>u</kbd> -> ユーザ名を入力 -> <kbd>Enter</kbd>」でユーザ毎のリソース使用状況を監視できます。

実行例2 (入力キー: u,"guest",Enter)
![top_u.gif](https://qiita-image-store.s3.amazonaws.com/0/283234/444051a1-1a24-90f7-8c4f-d60f6e0119a3.gif)

# ■ プロセスを終了させる ( <kbd>k</kbd> )

top コマンド実行中に「<kbd>k</kbd> -> 終了させたい PID 入力 -> <kbd>Enter</kbd>」で、入力した PID の プロセスを終了 (SIGTERM シグナルを発行)できます (送信シグナルは変更可)。

実行例3 (入力キー: L,"top",k,"16973",Enter,Enter)
![top_k2.gif](https://qiita-image-store.s3.amazonaws.com/0/283234/de8a5d67-e750-13fe-d469-636ba692d322.gif)

# ■ コマンドを詳細に表示 ( <kbd>c</kbd> )

top コマンド実行中に <kbd>c</kbd> で、実行コマンド (COMMAND) をフルパスか、[]付きで表示できます。[]付きは、カーネルモードで動作していることを意味します。

実行例4

```
 top - 22:08:04 up 4 days,  6:11,  1 user,  load average: 0.61, 0.72, 0.45
 ... (略) ...
 
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                      
  1516 root      20   0 4367388 654408 107028 S   3.3  8.1  22:27.82 /usr/bin/gnome-shell         
 19753 root      20   0  790540  39864  29668 S   0.7  0.5   0:02.43 /usr/libexec/gnome-terminal+ 
  1154 gdm       20   0  845936  25776  18680 S   0.3  0.3   3:09.20 /usr/libexec/gsd-color       
 20036 root      20   0  162460   4580   3868 R   0.3  0.1   0:00.08 top                          
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.17 [kthreadd]                   
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [kworker/0:0H]               
     6 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [mm_percpu_wq] 
```

# ■ ソート関連 ( <kbd><</kbd>, <kbd>></kbd>, <kbd>P</kbd>, <kbd>M</kbd>, <kbd>R</kbd> )

top コマンド実行中に
<kbd><</kbd>, <kbd>></kbd> で、ソート対象のカラムを選択できます。
<kbd>P</kbd> で、CPU の使用量順にソートできます。
<kbd>M</kbd> で、メモリの使用量順にソートできます。
<kbd>R</kbd> で、ソートの昇順/降順を切り替えられます。

さらに...
<kbd>z</kbd>...カラー／モノクロ切り替え
<kbd>x</kbd>...選択カラムをハイライト
<kbd>b</kbd>...選択カラムのハイライトをより分かり易くする
を使うことで、どのカラムを選択しているのか分かりやすくできます。

実行例5 (入力キー: z,x,b,>,<,<,<,<,<,<,<,<)
![5_sort.gif](https://qiita-image-store.s3.amazonaws.com/0/283234/b209d64b-dabe-e6ba-4c00-df5813f31e9a.gif)

ちなみに <kbd>Z</kbd> で、詳細なカラーリングの設定ができます。

# ■ CPU、メモリ、スワップの使用率を視覚的に表示 ( <kbd>t</kbd>, <kbd>m</kbd> )
,
top コマンド実行中に「<kbd>t</kbd> -> <kbd>t</kbd>」で、CPUの使用率を視覚的(横棒グラフ)に表示できます。同様に「<kbd>m</kbd> -> <kbd>m</kbd>」で、メモリ、スワップの使用率も視覚的に表示できます。

さらに <kbd>z</kbd> で、横棒グラフの内訳を分かりやすく表示できます。

実行例6  (入力キー: t,t,m,m,z)
![5_mem_cpu_toggle.gif](https://qiita-image-store.s3.amazonaws.com/0/283234/6cdbcd62-2ff6-4964-1df6-d41dc86dce23.gif)

# ■ CPU コア毎の情報を表示 ( <kbd>1</kbd> )

top コマンド実行中に <kbd>1</kbd> で、CPU コア毎の情報を表示できます。デフォルトでは、複数の CPU コア情報が1つに纏められており %Cpu(s) と表示されています。

実行例7

```
 top - 22:06:48 up 4 days,  6:10,  1 user,  load average: 0.56, 0.74, 0.43
 Tasks: 270 total,   1 running, 269 sleeping,   0 stopped,   0 zombie
 %Cpu0  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 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.3 us,  0.0 sy,  0.0 ni, 99.7 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 ★
 ... (略) ...
```

# ■ プロセス毎の CPU 使用率を CPU コア数の総使用率で表示 ( <kbd>I</kbd> )

top コマンド実行中に <kbd>I</kbd> で、プロセス毎の CPU 使用率を CPU コア数の総使用率で表示できます。デフォルトでは、プロセス毎に使用している CPU コアの使用率が表示されています。

**実行例8** では、CPU コア数が4つのシステムで、CPU に負荷を掛けています($ stress --cpu 1)。%Cpu3、%CPU がそれぞれ 100 になります。%Cpu3 が3番目の CPU コア情報で、%CPU が stress コマンドの CPU 使用率です。

実行例8

```console
# 1つの CPU コアに負荷を掛ける
$ stress --cpu 1 &

$ top (1 キー 押下の状態)
top - 22:02:01 up 4 days,  6:05,  1 user,  load average: 0.96, 0.44, 0.22
Tasks: 272 total,   2 running, 270 sleeping,   0 stopped,   0 zombie
%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.7 us,  0.0 sy,  0.0 ni, 98.6 id,  0.0 wa,  0.7 hi,  0.0 si,  0.0 st
%Cpu2  :  0.7 us,  0.0 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
        ^^^^^^^^
KiB Mem :  8093920 total,   690324 free,  2598136 used,  4805460 buff/cache
KiB Swap:  8225788 total,  8043004 free,   182784 used.  4710784 avail Mem 
 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU   %MEM     TIME+ COMMAND
19817 root      20   0    7904     96      0 R 100.0    0.0   0:39.91 stress
                                               ^^^^^^
```

この状態で <kbd>I</kbd> を押下すると、%CPU が 24.9(約25) と表示されます。これは、stress コマンドの CPU 使用率(100)が4つある CPU コア数の総使用量で表示されている(100/4 = 25)ためです。

実行例9

```
top - 22:05:08 up 4 days,  6:08,  1 user,  load average: 1.06, 0.77, 0.40
Tasks: 272 total,   2 running, 270 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8093920 total,   687224 free,  2600356 used,  4806340 buff/cache
KiB Swap:  8225788 total,  8043004 free,   182784 used.  4708324 avail Mem 
 
  PID USER      PR  NI    VIRT    RES   SHR  S  %CPU   %MEM     TIME+ COMMAND
19817 root      20   0    7904     96     0  R  24.9  　　　　0.0   3:46.19 stress
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　 　　^^^^
```

なお、システムの CPU コア数は、
　`$ nproc`、
　`$ grep -c processor /proc/cpuinfo`、
　`$ getconf _NPROCESSORS_ONLN`、
などからも確認できます。

# ■ 設定を保存 ( <kbd>W</kbd> )

top コマンド実行中に <kbd>W</kbd> で、前述の設定などを保存(~/.toprcに保存)できます。例えば「<kbd>z</kbd> -> <kbd>W</kbd>」とすると、top コマンド実行時は常に <kbd>z</kbd> を押下した(カラーリングされた)状態になります。

設定をリセットする場合は、設定ファイルを削除 ($ rm ~/.toprc) すれば、OK です。