LinuxでCPUの使用率を確認したい時はないでしょうか?
確認するコマンドはいくつか知っていますが、どれを使えば良いのかわからない時はないでしょうか?
そういった時の為にLinuxでCPUの使用率の確認方法を現役エンジニアの筆者がまとめます。
筆者はWindowsサーバーやLinuxサーバーの運用構築を11年間以上おこなってきました。その経験を元に知識を公開していきます!
この記事を読めばLinuxでCPU使用率を確認したい時、どのコマンドを使用すればよいのか。それぞれのコマンドの使用用途がわかります。
LinuxでCPUの使用率を確認する方法
LinuxでCPUの使用率を確認するコマンドは以下の通りです。
- vmstatコマンド
- topコマンド
それぞれの特徴と確認のやり方を見ていきます。
CPUの使用率を確認するvmstatコマンド
CPU使用率を確認するvmstatコマンドの基礎知識
まずはvmstatコマンドです。
vmstat 取得する間隔(秒数) 取得する回数
間隔と回数は省略できます。省略した場合は1が選択されて現在の情報が一回だけ表示されます。
[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 746040 3176 131132 0 0 94 8 42 78 0 0 99 0 0
[root@localhost ~]#
CPUの他にもメモリやネットワークなどの情報も表示されます。
CPU関連の表示の意味をまとめます。
表示される文字 | 意味 |
---|---|
us | ユーザーが使用した時間 |
sy | システムのカーネルが使用した時間 |
id | アイドルタイム |
wa | I/Oの待ち時間 |
st | 仮想マシンが使用した時間 |
CPU使用率は(100-アイドルタイム)で計算できます。
ここではアイドルタイムが99(遊休しているCPUが99%)なのでCPU使用率は1%です。
CPU使用率を間隔と回数を指定して実行してみる
例として2秒間隔で10回取得してみます。
[root@localhost ~]# vmstat 2 10
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 744968 3176 131132 0 0 55 4 28 51 0 0 99 0 0
0 0 0 744944 3176 131132 0 0 0 0 17 23 0 0 100 0 0
0 0 0 744944 3176 131132 0 0 0 0 8 9 0 0 100 0 0
0 0 0 744944 3176 131132 0 0 0 0 12 17 0 0 100 0 0
0 0 0 744944 3176 131132 0 0 0 0 12 15 0 0 100 0 0
0 0 0 744944 3176 131132 0 0 0 0 9 12 0 0 100 0 0
0 0 0 744944 3176 131132 0 0 0 0 13 16 0 0 100 0 0
0 0 0 744944 3176 131132 0 0 0 0 8 13 0 0 100 0 0
0 0 0 744944 3176 131132 0 0 0 0 12 14 0 0 100 0 0
0 0 0 744944 3176 131132 0 0 0 0 13 20 0 0 99 0 0
[root@localhost ~]#
2秒間隔で10回CPU使用率を確認できました。
ここではCPUはほぼ休んでますね。。
LinuxでCPUに負荷をかけ検証してみる
LinuxでCPUに負荷をかけるには、bcコマンドで計算をさせていきます。かかった時間はtimeコマンドで確認しましょう!
[root@localhost ~]# time echo "99999^10^5" | bc > /dev/null
real 0m26.544s
user 0m26.512s
sys 0m0.010s
計算は表示させないので、リダイレクトでnullへ向けましょう!
別のteratermでログインして先程と同じ様にvmstatでCPUを確認します。
[root@localhost ~]# vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 64256 903136 0 34316 1 152 127 221 72 63 3 0 97 0 0
1 0 64256 902764 0 34316 0 0 0 0 1023 17 100 0 0 0 0
1 0 64256 902516 0 34316 0 0 0 0 1036 16 100 0 0 0 0
1 0 64256 902640 0 34316 0 0 0 0 1040 18 100 0 0 0 0
1 0 64256 902268 0 34316 0 0 0 0 1041 16 100 0 0 0 0
1 0 64256 901896 0 34316 0 0 0 0 1033 15 100 0 0 0 0
1 0 64256 901896 0 34316 0 0 0 0 1039 17 100 0 0 0 0
1 0 64256 901772 0 34316 0 0 0 0 1056 17 100 0 0 0 0
0 0 64256 903904 0 34316 0 0 0 0 203 22 18 0 82 0 0
0 0 64256 903904 0 34316 0 0 0 0 8 11 0 0 100 0 0
0 0 64256 903904 0 34316 0 0 0 0 13 18 0 0 100 0 0
ユーザーのCPU使用率が100となっており、処理が終わったらCPU使用率が0となりアイドルタイムが100となっています。
CPUの使用率を確認するtopコマンド
CPUの使用率を確認するtopコマンドの基礎知識
次にtopコマンドです。
top
Windowのタスクマネージャーのように、CPU使用率が高い順に表示してくれます。
top - 22:31:45 up 51 min, 1 user, load average: 0.00, 0.01, 0.03
Tasks: 106 total, 2 running, 99 sleeping, 5 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1014540 total, 744448 free, 135784 used, 134308 buff/cache
KiB Swap: 839676 total, 839676 free, 0 used. 736708 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1277 root 20 0 162116 2260 1560 R 0.7 0.2 0:00.59 top
1 root 20 0 125364 3892 2584 S 0.0 0.4 0:01.34 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
5 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kworker/u2:0
6 root 20 0 0 0 0 S 0.0 0.0 0:00.08 ksoftirqd/0
情報を集約して表示してくれる上の領域と、CPU使用率順にプロセスを並び替えてる下の領域に分かれています。
3行目のCPUの欄です。
表示される文字 | 意味 |
---|---|
us | ユーザーが使用した時間 |
sy | システムのカーネルが使用した時間 |
id | アイドルタイム |
wa | I/Oの待ち時間 |
st | 仮想マシンが使用した時間 |
ユーザーが0.7%システムが0.3%使用しており、使われていない(アイドルタイム)のが99%になっていますね。
CPU使用率を間隔を指定して更新してみる
更新の間隔を指定する事も可能です。
top -d 更新間隔(秒数)
これで更新間隔が3秒になります。
CPU使用率が高いプロセスを終了させる
サーバーが不安定になりCPU使用率が高いプロセスを終了することもあるでしょう!
そんな時はtopコマンドが楽です。
top - 22:31:45 up 51 min, 1 user, load average: 0.00, 0.01, 0.03
Tasks: 106 total, 2 running, 99 sleeping, 5 stopped, 0 zombie
%Cpu(s): 99 us, 0.3 sy, 0.0 ni, 0.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1014540 total, 744448 free, 135784 used, 134308 buff/cache
KiB Swap: 839676 total, 839676 free, 0 used. 736708 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1277 root 20 0 162116 2260 1560 R 99 0.2 0:00.59 top
1 root 20 0 125364 3892 2584 S 0.0 0.4 0:01.34 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
CPU使用率が高い順に表示されます。不要なプロセスを終了させればOKです。
プロセスを強制終了させるコマンドは以下です。
kill -9 プロセスID
CPUに負荷をかけてtopコマンドで確認してみる
先程と同じ様に高負荷の計算をtimeとbcコマンドで行って、topコマンドでも確認してみます。
time echo "99999^10^5" | bc > /dev/null
もうひとつのteratermでリモートしてtopコマンドを使用します。
top - 18:24:54 up 1:01, 2 users, load average: 0.22, 0.06, 0.06
Tasks: 104 total, 2 running, 102 sleeping, 0 stopped, 0 zombie
%Cpu(s): 99.7 us, 0.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1014540 total, 901276 free, 78240 used, 35024 buff/cache
KiB Swap: 839676 total, 775676 free, 64000 used. 846876 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1398 root 20 0 14832 2380 644 R 99.7 0.2 0:14.33 bc
1 root 20 0 125364 2332 1532 S 0.0 0.2 0:01.40 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
CPUが高負荷となっており、bcのプロセスがCPU使用率99.7%で表示されている事が確認できます。
LinuxでCPU以外でリソースを確認するコマンドについて
Linuxのメモリ使用率確認コマンドについて
Linuxの物理ディスク確認コマンドについて
Linuxのファイルシステムの容量確認コマンドについて
Linuxのファイルやディレクトリの容量確認コマンドについて
まとめ:LinuxでCPUの使用率を確認する方法
LinuxでCPUの使用率を確認するコマンドは以下の通りです。
- vmstatコマンド
- topコマンド
vmstatコマンドの特徴
CPUの他にもメモリやネットワークなどの情報も表示されて、総合的なリソースが確認できます。
間隔と回数を指定して情報を表示できる為、リソースの推移などを確認する時に便利です。
topコマンド
CPU使用率が高い順にプロセスを並び替えてくれる為、負荷の高いプロセスを確認したり終了させる時に便利です。