hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

CPU使用率、メモリ使用量、ディスクアクセスの高いプロセスの調べ方



1 はじめに

システムを運用している中で、コマンドの応答が遅くなるなどの問題が発生する場合があります。このような状況では、CPUやメモリなどのコンピュータリソースを多く使用しているプロセスを特定し、問題の原因を特定する必要があります。リソースを多く消費しているプロセスを見つける方法はいくつかありますが、ここではpsコマンドを使用してCPU使用率、メモリ使用率、およびディスクアクセスが高いプロセスを調べる方法について説明します。なお、psコマンドの詳細な使い方は、psコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

2 検証環境

AlmaLinuxの版数は以下のとおりです。

[root@server ~]# cat /etc/redhat-release
AlmaLinux release 8.6 (Sky Tiger)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
4.18.0-372.9.1.el8.x86_64

3 CPU使用率の高いプロセスを調べる方法(--sort=-%cpu)

3.1 事前準備

私の環境は、CPU使用率の高いプロセスが少なく実行結果を確認しずらいので、意図的にCPU使用率の高いプロセスを起動しました。stress-ngコマンドを実行して、CPU使用率が10%,20%のプロセスをそれぞれ1つ起動します。なお、stress-ngコマンドのインストール方法、使い方は、stress-ngコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server ~]# stress-ng -k -c 1 -l 10 -q &
[1] 1515
[root@server ~]# stress-ng -k -c 1 -l 20 -q &
[2] 1517

3.2 動作確認

プロセスのCPU使用率を降順に表示するには、psコマンドのオプションに--sort=-%cpuと指定します。以下の実行例を確認すると、プロセスのCPU使用率が降順に表示されていることがわかります。CPU使用率を昇順に表示するには、--sortオプションに+%cpuを指定します。

[root@server ~]# ps ax --sort=-%cpu -o command,pid,%cpu|head -n 5
COMMAND                       PID %CPU
stress-ng -k -c 1 -l 20 -q   1518 21.2
stress-ng -k -c 1 -l 10 -q   1516 10.5
/usr/lib/systemd/systemd --     1  1.5
/usr/bin/python2 -Es /usr/s   616  1.3

pkillコマンドを実行して、stressプロセスを終了します。

[root@server ~]# pkill stress-ng

4 メモリ使用量の高いプロセスを調べる方法(--sort=-rss)

4.1 事前準備

stressコマンドを実行して、512M,256Mのメモリを獲得するプロセスをそれぞれ1つ起動します。なお、stressコマンドの詳細な使い方は、stressコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server ~]# stress -m 1 --vm-bytes 256M --vm-hang 0 -q &
[1] 1543
[root@server ~]# stress -m 1 --vm-bytes 512M --vm-hang 0 -q &
[2] 1545

4.2 動作確認

プロセスが使用しているメモリ使用量(RSS)を降順に表示します。以下の実行例を確認すると、プロセスのメモリ使用量が降順に表示されていることがわかります。

[root@server ~]# ps ax --sort=-rss -o command,pid,ppid,vsz,rss|head -n 5
COMMAND                       PID  PPID    VSZ   RSS
stress -m 1 --vm-bytes 512M  1546  1545 531600 524456
stress -m 1 --vm-bytes 256M  1544  1543 269456 262288
/usr/bin/python2 -Es /usr/s   616     1 359088 29808
/usr/bin/python2 -Es /usr/s   937     1 574280 19484

pkillコマンドを実行して、stressプロセスを終了します。

[root@server ~]# pkill stress
[1]-  Terminated              stress -m 1 --vm-bytes 256M --vm-hang 0 -q
[2]+  Terminated              stress -m 1 --vm-bytes 512M --vm-hang 0 -q

5 ディスクアクセスの割合が高いプロセスを調べる方法

iotopコマンドを使って、ディスクアクセスが多いプロセスを調べてみます。なお、iotopコマンドの詳細な使い方は、iotopコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server ~]# iotop

stressコマンドを実行します。

[root@server ~]# stress -d 1 -q &
[1] 4682

以下の実行例を確認すると、stressコマンドで起動したプロセスがiotopコマンド実行結果の最上位に表示されていることがわかります。

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ