topコマンドの使い方


最新版は、以下に記載しました。
https://hana-shin.hatenablog.com/entry/2022/03/28/215636

#1 topコマンドとは?
実行中のプロセスの状態をリアルタイムで表示するコマンドです。

#2 環境
VMware Workstation 15 Player上の仮想マシンを使いました。
仮想マシンのOS版数は以下のとりです。

```console:OS版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

[root@server ~]# uname -r
3.10.0-957.el7.x86_64
```

```console:コマンド版数
[root@server ~]# top -v
  procps-ng version 3.3.10
-snip-
```


#3 実行方法

```console:実行方法
[root@server ~]# top
```
topコマンドを実行すると、下記のような画面が表示されます。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/8649b759-de4f-63f3-a1c1-2d641f988e32.png)


#4 ヘルプの表示、終了方法
`h`を押下すると、下記ヘルプ画面が表示されます。
`ESC`または`q`を押下すると、ヘルプ画面が終了して、元の画面に戻ります。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/dba1c443-5d96-533a-e6d2-cd1974df110a.png)


#5 フィルタリングの使い方(`u`) その1
実行ユーザ名で、表示するプロセスを絞り込むことができます。

`u`を押下して、絞り込みをしたい実効ユーザ名を入力します。
ここでは、実行ユーザ名に`apache`を入力しました。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/15690ee5-82de-cd4e-200c-e9744522cb5d.png)

`apache`を入力して、`Enter`を入力すると、
実効ユーザ名が`apache`のプロセスだけが表示されていることがわかります。
元の状態に戻すには、`Shift`を押下したまま、`=`を押下します。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/c5404c2f-5534-b9b5-85fd-47aa1e39a6bb.png)


#6 フィルタリングの使い方(`o`) その2

##6.1 CPU使用率で絞り込む方法
事前準備として、CPU使用率が`30%`,`60%`のプロセスを起動します。
stress-ngコマンドの使い方は、[stress-ngコマンドの使い方](https://qiita.com/hana_shin/items/0a3a615274717c89c0a4)を参照してください。

```console:事前準備(CPU使用率30%)
[root@server ~]# stress-ng -c 1 -k -l 30 -q &
```

```console:事前準備(CPU使用率60%)
[root@server ~]# stress-ng -c 1 -k -l 60 -q &
```

起動したプロセスのCPU使用率を確認します。
psコマンドの使い方は、[psコマンドの使い方](https://qiita.com/hana_shin/items/a1c5400458f8ca04a809)を参照してください。

```console:事前準備(CPU使用率の確認)
[root@server ~]# ps -C stress-ng -o comm,pid,ppid,%cpu
COMMAND            PID   PPID %CPU
stress-ng         9794   9708  0.0
stress-ng         9795   9794 30.7
stress-ng         9796   9708  0.0
stress-ng         9797   9796 60.2
```

次に、topコマンドでプロセスのCPU使用率を確認します。
CPU使用率が20%より大きなプロセスだけを表示してみます。
`o`を押下したあと、`%CPU>20.0`と入力します。
タイプミスした場合、`DEL`でタイプミスした文字を削除することができます。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/ec589afc-6210-00a7-719f-ec28ce99ceb9.png)

次に`Enter`を押します。
事前準備で起動した2つのプロセスが表示されていることがわかります。
元の状態に戻すには、`Shift`を押下したまま、`=`を押下します。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/2682a9cc-8716-1112-af1c-c82409d2568b.png)



##6.2 PIDで絞り込む方法
PIDが10未満のプロセスだけを表示してみます。
`o`を押下したあと、`PID<10`と入力します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/ea2f2528-ece0-14b7-ce84-18a9741f47be.png)

次に`Enter`を押します。
PIDが10未満のプロセスだけが表示されていることがわかります。
元の状態に戻すには、`Shift`を押下したまま、`=`を押下します。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/09cb8fe0-c41a-0a1c-f823-a8b5397f2308.png)

##6.3 COMMAND名で絞り込む方法
COMMAND名にsystemdを含むプロセスを表示してみます。
`o`を押下したあと、`COMMAND=systemd`と入力します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/6a92f705-46cf-d34e-2716-c5f921372ca0.png)


次に`Enter`を押します。
COMMAND名にsystemdを含むプロセスだけが表示されていることがわかります。
元の状態に戻すには、`Shift`を押下したまま、`=`を押下します。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/6f16e668-830a-9e35-c8d6-8ef73f125ea6.png)



#7 フィールドのカスタマイズ方法(`Fields Management`)

##7.1 項目を追加する方法
topコマンドを実行すると、下記赤枠で囲まれた項目が、デフォルトで表示されます。
ここでは、デフォルトで表示される項目の変更方法を説明します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/48df556f-13df-7a96-3760-1b3ccc0bb17e.png)

`f`を押下すると、下記画面が表示されます。
・黄色の項目：現在(7.1の赤枠内)表示されている項目
・白色の項目：追加で表示できる項目
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/970f7258-758c-c458-72b9-e6362b6c994e.png)

ここでは、CPUの使用時間(`TIME`)を表示してみます。
矢印キーを使って、`TIME`のところまで、カーソルを移動します。
`TIME`のところで、`SPACE`を押下します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/11ffb2c7-fa20-8d18-dc51-0d1082793762.png)

次に`ESC`を押下すると、下記画面に戻ります。
右端に、`TIME`項目が表示されるようになったことがわかります。
stress-ngプロセスは、各々下記時間だけCPUを使用したことがわかります。
・CPU使用率を60%に設定したプロセス：4分16秒
・CPU使用率を30%に設定したプロセス：2分10秒
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/178c2a3b-f388-abab-dc85-4e34ee281b66.png)


##7.2 項目を削除する方法
7.1で追加した、`TIME`の項目を削除してみます。
`f`を押下して、下記画面を表示します。
そして、矢印キーを使って、`TIME`項目にカーソルを移動します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/a11c9e7b-56bd-4ee1-39db-18e63989e817.png)

`SPACE`を押下します。
選択した項目が黄色から白色にかわったことを確認します。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/f0e23252-a696-58c4-a5b8-dad5d4391ba1.png)

`ESC`を押下すると、下記画面に戻ります。
`TIME`項目が削除されたことがわかります。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/6727401c-8b25-83f3-f6ce-65b3767997fe.png)


#8 設定を保存する方法(`W`)
`Shift`を押下したまま、`w`を押下すると、設定を保存することができます。
次回、topコマンド実行時、保存した設定で実行することができます。

ここでは、下記4項目もデフォルトで表示されるようにしてみます。
`TIME`,`SWAP`,`CODE`,`DATA`
なお、保存した設定は、ログインディレクトリ配下の.toprcファイルに保存されます。

`f`を押下したあと、カーソルを`TIME`,`SWAP`,`CODE`,`DATA`にあわせ、
`SPACE`を押下して選択します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/dc0f6f5d-65d4-2205-54aa-11e00995c59d.png)

`ESC`を押下すると、下記画面に戻ります。
ここで、`Shift`を押下したまま、`w`を押下して、設定を保存します。
このとき、`Write configuration to /root/.toprc`といったメッセージが表示されます。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/fc215af5-f703-14c4-23d6-1f7df6d30847.png)

`Ctrl`を押下したまま、`c`を押下して、topコマンドを終了します。
そして、再度、topコマンドを実行します。
以下のように、`TIME`,`SWAP`,`CODE`,`DATA`が表示されていることがわかります。
（つまり、保存した設定でtopコマンドが実行されていることがわかります）
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/533cdc74-2401-de0d-97da-a35379d7f796.png)


#8 プロセス終了や優先度を変更する方法

##9.1 プロセスを終了する方法(`k`)
`k`を押下して、終了するプロセスを選択します。
ここでは、stress-ngプロセス(PID=9976)を終了するため、PIDとして9976を入力します。
そして、`Enter`を押下します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/e360797c-63fb-7331-b132-db65e7f0c388.png)

次に、プロセスに送信するシグナルを選択します。
ここでは、デフォルトの15(SIGTERM)を選択します。
そのあと、`Enter`を押下すると、stress-ngプロセスが終了します。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/faea08da-2e1e-2d0a-6ba4-7a052f3417cb.png)

##9.2 プロセスの優先度(NICE値)を変更する方法(`r`)
`r`を押下して、優先度を変更するプロセスを選択します。
ここでは、stress-ngプロセス(PID=9984)の優先度を変更するため、PIDとして9984を入力します。
そして、`Enter`を押下します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/9e4b97e5-1c11-0d95-076b-45ff0b2abc76.png)

優先度を19に変更するため、`19`と入力したあと、`Enter`を押下します。
なお、優先度については、[ここ(プロセス優先度(NICE値)を変更する方法)](https://qiita.com/hana_shin/items/438dfe93a765ffa337ae)を参照してください。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/0f917607-b71a-f045-596e-b47a446054b3.png)

stress-ngプロセスの優先度を確認します。
優先度が0から19に変更されたことがわかります。
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/d6455478-0bb3-3a8a-03f8-c69cfafa7bb9.png)



#10 表示するプロセス数を制限する方法
表示するプロセス数を指定することができます。
ここでは、表示するプロセス数を5にしてみます。

`n`を押下して、下記画面を表示します。そして、表示するプロセス数を入力します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/14cf1d4b-a145-0973-15df-b3fcb70894a0.png)

プロセスが5つだけ表示されていることがわかります。
元の状態に戻すには、`Shift`を押下したまま、`=`を押下します。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/033e5d1d-a168-60a2-8d42-a2382652ebf9.png)


#11 ソートする方法
デフォルトでは、プロセスはCPU使用率の順（降順）でソートされています。
ここでは、プロセスをメモリ使用量の順（降順）にソートしてみます。

`f`を押下したあと、矢印キーを使ってカーソルを`%MEM`に移動します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/23219650-7e8a-85e6-c4b4-0433742f6bfd.png)

次に、`s`を押下します。
`s`を押下すると`%CPU`が`%MEM`に変更されます（赤い枠の中）。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/f8cf9234-2f8b-58c3-76bf-a9d5cf87d20f.png)

`f`を押下して元の画面に戻ります。
プロセスがメモリ使用量の順でソートされていることがわかります。
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/b479e695-f091-1226-8677-544903b9a80d.png)


#12 文字列を検索する方法
表示されているプロセス情報から文字列を検索することができます。
`Shift`を押下したまま、`L`を押下して、検索する文字列を入力します。
ここでは、`apache`と入力してみました。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/ed9abdd6-418c-d6f9-d21e-fea58add679a.png)

`Enter`を入力すると、検索した文字列がハイライトされます。
元の状態に戻すには、`Shift`を押下したまま、`=`を押下します。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/775b20f3-8018-85a5-89cd-ecc8142af6e5.png)




#Z 参考情報
[A Guide to the Linux “Top” Command](https://www.booleanworld.com/guide-linux-top-command/)
[How to reduce and/or add more columns or fields to top command in Linux (swap, memory, etc)](https://www.golinuxhub.com/2018/05/top-command-add-reduce-field-column-memory-swap.html)