Linuxのリソース使用状況をコマンドで確認する!(top/vmstat/sar/free/df/iostat/ss)

Linuxの稼働状況を調査するときに使用する基本的なコマンドを掲載します。

CPU使用率の高いプロセスを確認する!(top)

topコマンドを使用するとCPU使用率の高い順にプロセスの一覧を表示することができます。CPU使用率の高いプロセスの存在確認をするのに便利です。CPU全体の使用率やメモリの使用率も表示されるので、稼働状況の概要を知るのにまず使用したいコマンドです。

$ top

top - 22:08:35 up 49 min,  1 user,  load average: 0.71, 1.07, 0.62
Tasks: 230 total,   1 running, 229 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.9 us,  5.7 sy,  0.0 ni, 91.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1770.9 total,    421.9 free,    997.6 used,    545.6 buff/cache
MiB Swap:   2048.0 total,    951.5 free,   1096.5 used.    773.3 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                          
   8915 usradmin  20   0  226056   3924   3300 R  11.8   0.2   0:00.03 top                                              
      1 root      20   0  173068   8944   4100 S   0.0   0.5   0:04.48 systemd                                          
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd                                         
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                           
...

CPU全体の使用率とメモリ使用状況を確認する!(vmstat)

vmstatコマンドを使用するとCPU全体の使用率とメモリ使用率を確認できます。ページングの状況が確認できるので、スラッシングによるパフォーマンスダウンが発生していないか確認することができます。

$ vmstat -t 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 JST
 0  0 1121520 407384     16 603988   21  204  1783   338  449  750  3  2 93  2  0 2023-01-10 22:13:38
 1  0 1121520 407384     16 604028    0    0     0     0  200  271  0  0 100  0  0 2023-01-10 22:13:39
 0  0 1121520 407384     16 604028    0    0     0     0  256  256  0  1 99  0  0 2023-01-10 22:13:40
 0  0 1121520 403128     16 604028    8    0     8     8  379  503  1  1 98  0  0 2023-01-10 22:13:41
 0  0 1121520 403128     16 604028    0    0     0     0  437  455  1  1 98  0  0 2023-01-10 22:13:42

※「-t」オプションを指定すると、計測した時刻を表示することができます。

コア単位のCPU使用率を確認する!(sar)

コア単位のCPU使用率をsarコマンドで確認します。sarコマンドを使用するためには、sysstatパッケージをインストールする必要があります。複数コアを使用している場合は、vmastatのみでなくsarコマンドも使用したほうがよいです。例えば、2コアでCPU使用率が50%の場合は、1つのコアの使用率が100%になっいて、システム全体のパフォーマンスダウンにつながっている場合があります。

# sar -P ALL 1 3
Linux 5.14.0-162.6.1.el9_1.0.1.x86_64 (vmsans01) 	01/10/2023 	_x86_64_	(2 CPU)

10:29:39 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
10:29:41 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
10:29:41 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
10:29:41 PM       1      0.00      0.00      0.00      0.00      0.00    100.00

10:29:41 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
10:29:42 PM     all      0.51      0.00      1.52      0.00      0.00     97.98
10:29:42 PM       0      1.00      0.00      2.00      0.00      0.00     97.00
10:29:42 PM       1      0.00      0.00      1.02      0.00      0.00     98.98

10:29:42 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
10:29:43 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
10:29:43 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
10:29:43 PM       1      0.00      0.00      0.00      0.00      0.00    100.00

Average:        CPU     %user     %nice   %system   %iowait    %steal     %idle
Average:        all      0.17      0.00      0.50      0.00      0.00     99.33
Average:          0      0.34      0.00      0.67      0.00      0.00     98.99
Average:          1      0.00      0.00      0.34      0.00      0.00     99.66

メモリ使用率を確認する!(free)

メモリ使用率をわかりやすく確認したいときは、freeコマンドが便利です。実メモリの空き容量は、「available」で確認できます。Swapの使用率もわかりやすく表示できます。

$ free -m
               total        used        free      shared  buff/cache   available
Mem:            1770         988         386          11         590         782
Swap:           2047        1094         953

ディスク使用率を確認する!(df)

デイスク使用率はdfコマンドで確認します。問題発生時には、まず使用率が100%になっているファイルシステムがないか調べたいところです。

$ df -m
Filesystem                   1M-blocks  Used Available Use% Mounted on
devtmpfs                             4     0         4   0% /dev
tmpfs                              886     1       886   1% /dev/shm
tmpfs                              355     6       349   2% /run
/dev/mapper/rl_vmsans03-root     17394  9794      7601  57% /
/dev/sda1                         1014   469       546  47% /boot
tmpfs                              178     1       178   1% /run/user/42
tmpfs                              178     1       178   1% /run/user/1000

I/Oの発生状況を確認する!(iostat)

I/Oの発生状況を調査したい場合は、iostatコマンドを使用します。iostatコマンドでもCPU使用率を確認できます。CPU使用率と合わせて、iostatコマンドでI/Oの発生状況を確認できます。

$ iostat -t 1 3
Linux 5.14.0-162.6.1.el9_1.0.1.x86_64 (vmsans01) 	01/10/2023 	_x86_64_	(2 CPU)

01/10/2023 10:20:53 PM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.27    0.01    1.73    2.02    0.00   93.96

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
dm-0            204.69      2835.52       225.57         0.00   10439942     830514          0
dm-1            101.00        61.84       343.34         0.00     227670    1264116          0
sda             211.04      3025.62       569.53         0.00   11139876    2096917          0
sr0               0.02         0.17         0.00         0.00        630          0          0
...

※「-t」オプションを指定すると、計測した時刻を表示することができます。

ネットワークの接続状況を確認する!(ss)

ssコマンドでネットワーク接続状況を確認します。root権限で使用するとポートを使用するプロセスの情報を表示することもできます。

# ss -4anp
Netid             State              Recv-Q             Send-Q                         Local Address:Port                            Peer Address:Port              Process                                             
udp               UNCONN             0                  0                                    0.0.0.0:44833                                0.0.0.0:*                  users:(("avahi-daemon",pid=749,fd=14))             
udp               UNCONN             0                  0                                    0.0.0.0:5353                                 0.0.0.0:*                  users:(("avahi-daemon",pid=749,fd=12))             
udp               UNCONN             0                  0                                  127.0.0.1:323                                  0.0.0.0:*                  users:(("chronyd",pid=797,fd=5))                   
tcp               LISTEN             0                  4096                                 0.0.0.0:80                                   0.0.0.0:*                  users:(("docker-proxy",pid=1696,fd=4))             
tcp               LISTEN             0                  128                                  0.0.0.0:22                                   0.0.0.0:*                  users:(("sshd",pid=821,fd=3))                      
tcp               LISTEN             0                  128                                127.0.0.1:631                                  0.0.0.0:*                  users:(("cupsd",pid=820,fd=7))                     
tcp               ESTAB              0                  0                                 10.1.21.21:22                                  10.1.1.1:39142              users:(("sshd",pid=3545,fd=4),("sshd",pid=3515,fd=4))

おわりに

システムのリソース使用状況を知りたい場合に、まず使用したいコマンドをリストアップしました。問題発生時には、まず本稿のコマンドで原因を絞り込んでいきましょう。

関連記事

関連書籍(Amazon)

N/A