【Linux】vmstatコマンドの使い方と実行例

Linuxのvmstatコマンドの使い方と実行例についてまとめました。

メモリ使用量を確認(vmstatコマンド)

vmstatは、仮想メモリの統計情報を表示するコマンドです。

vmstat [オプション] [更新間隔 [回数]]
オプション 概要
-a アクティブ/非アクティブなメモリ量を表示
-d ディスクの統計情報を表示
-D ディスクの統計情報を1項目1行で表示
-f ブート後のフォーク数を表示
-m スラブ情報を表示root権限が必要)
-n 繰り返し表示する場合、ヘッダは1度だけ表示(デフォルトは一定周期でヘッダを表示)
-p パーティション 指定したパーティションの統計を表示
-s 1項目1行でメモリの統計情報とイベントカウンタを表示(常に1回のみ)
-S 単位 単位を定(kだと1000、Kだと1024、mだと1000000、Mだと1048576バイト単位)
-t タイムスタンプを表示(オプションなし、「-a」「-d」使用時のみ)
表示項目 記号 説明      
procs procsの値はシステムの動作の重さを数値的に観察できます。Linuxは複数のプロセスを同時実行をCPUコアの時分割により、擬似的に実現しています。例えば、1個のCPUコアで3個のプロセスを実行する際、実行キュー(待ち行列)中に3個のプロセスをリストアップし、単位時間内に3回の切り替えを行って、すべてのプロセスが同時に実行されているように見せかけています。この「実行キューに入っているプロセス数」が「procsのrの数値」となります。値が大きいほどなかなか処理が進まずシステムが重くなります。また、「実行中であるがディスクやネットワークなどのI/Oで待ち状態に入って、実際には実行できていないプロセス数」が「procsのb」の数値となり、値が大きいほどシステムの動作が重くなります。そして、「procsのrとbを足した値」を「ロードアベレージ」といいます。1プロセスがCPUを100%占有している場合、ロードアベレージが1となります。2プロセスで100%占有している場合は2となります。CPUのコア数が1個の場合、ロードアベレージが1になるとCPUが100%使用されている状態となります。コア数が4個の場合。ロードアベレージ4になるとCPUが100%使用されている状態となります。逆に、CPUの負荷が掛かっていないにも関わらず、ロードアベレージが高い場合、I/Oがボトルネックになっていることになります。
procs r 実行待ちのプロセス数(実行可能で「実行キュー」に入っている状態のプロセス数)。CPUのコア数以下の値であることが望ましい。
procs b IO待ちのプロセス数(割り込み不可能なスリープ状態にあるプロセス数)。bの値は0であることが望ましく、定常的に多い場合、ディスク性能に問題がある、ディスクIOが多いなどの理由でシステムが重くなっている可能性がある。
memory swpd 使用中の仮想メモリ量
memory free 純粋な空きメモリ量。空きメモリ量が増えると、その分がcacheに回されるため、この値が小さいからといった「メモリ容量が不足している」とは判断できない。
memory buff バッファに用いられているメモリ量。メモリ全体が逼迫するほど、この値が大きくなる。
memory cache キャッシュに用いられているメモリ量。キャッシュデータ(使用頻度が高いデータ)を保存しているだけなので、値が大きくなっても基本的には問題ない。
memory inact アクティブではないメモリ量
memory active アクティブなメモリの量
swap si swap inの略。スワップ領域(ディスク)からメモリへ展開したデータ量を示す。通常は0。スワップとは、メモリ量が不足したとき、メモリ上にある不要データやプログラムをディスクに書き込んでメモリの空き容量を増やすこと。
swap so swap outの略。メモリからスワップ領域(ディスク)へ展開したデータ量を示す。通常は0。0以外の値になっている場合、メモリ不足大量のメモリ量を消費するプログラムが動いている可能性がある。
io  bi ブロック型デバイス(HDD等)から読み込んだブロック数の秒間平均。大きなデータファイルの操作(移動、コピー、ダウンロードなど)や、大量のデータをデータベースから読む込むときに値が大きくなる。ブロック型デバイスス(HDD等)の性能に依存するため、一時的に高いから悪いとは一概にいえない。高い値が長時間続く場合、ディスクIOが頻発し、割り込み出来ない状態になっているため、ディスクの増設、サーバーの分散化などを検討する必要がある。
io bo ブロック型デバイス(HDD等)へ書き込んだブロック数の秒間平均。大きなデータファイルの操作(移動、コピー、ダウンロードなど)や、大量のデータをデータベース等に書き込むときに値が大きくなる。ブロック型デバイスス(HDD等)の性能に依存するため、一時的に高いから悪いとは一概にいえない。高い値が長時間続く場合、ディスクIOが頻発し、割り込み出来ない状態になっているため、ディスクの増設、サーバーの分散化などを検討する必要がある。
system in 1秒当たりの割り込み回数
system cs コンテクストスイッチの回数。csの値が大きいと、時分割によるプログラム切替えが頻発し、ロス(オーバーヘッド)が大きいことになる。
cpu us カーネルコード以外の実行に使用した時間(ユーザー時間)
cpu sy カーネルコードの実行に使用した時間(システム時間)
cpu id 空転していたアイドル時間
cpu wa I/O待ち時間
cpu st 仮想環境で実行している際、ホストOSにCPUリソースを割当ててもらえなかった時間の割合

sysstatパッケージのインストール

sudo apt-get install sysstat
sudo yum install sysstat

【実行例】メモリの統計情報を表示

メモリの統計情報を表示します。

$ vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 5  0      0 926516 147648 1637024    0    0     0     5    3    6  1  2 97  0  0

【実行例】アクティブ/非アクティブなメモリの統計情報を表示

アクティブ/非アクティブなメモリの統計情報を表示します。

$ vmstat -a

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 5  0      0 926516 147648 1637024    0    0     0     5    3    6  1  2 97  0  0

【実行例】メモリの統計情報を1項目1行で表示

$ vmstat -s

      3885396 K total memory
      1173656 K used memory
      1474648 K active memory
       957216 K inactive memory
       927080 K free memory
       147648 K buffer memory
      1637012 K swap cache
       102396 K total swap
            0 K used swap
       102396 K free swap
      5165892 non-nice user cpu ticks
          884 nice user cpu ticks
     13627994 system cpu ticks
    661589039 idle cpu ticks
       754139 IO-wait cpu ticks
            0 IRQ cpu ticks
       136342 softirq cpu ticks
            0 stolen cpu ticks
       841519 pages paged in
     34920233 pages paged out
            0 pages swapped in
            0 pages swapped out
    618866785 interrupts
    987754169 CPU context switches
   1702013858 boot time
       366946 forks

【実行例】ディスクI/Oの情報を表示

$ vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
ram0       0      0       0       0      0      0       0       0      0      0
ram1       0      0       0       0      0      0       0       0      0      0
ram2       0      0       0       0      0      0       0       0      0      0
ram3       0      0       0       0      0      0       0       0      0      0
ram4       0      0       0       0      0      0       0       0      0      0
ram5       0      0       0       0      0      0       0       0      0      0
ram6       0      0       0       0      0      0       0       0      0      0
ram7       0      0       0       0      0      0       0       0      0      0
ram8       0      0       0       0      0      0       0       0      0      0
ram9       0      0       0       0      0      0       0       0      0      0
ram10      0      0       0       0      0      0       0       0      0      0
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
ram11      0      0       0       0      0      0       0       0      0      0
ram12      0      0       0       0      0      0       0       0      0      0
ram13      0      0       0       0      0      0       0       0      0      0
ram14      0      0       0       0      0      0       0       0      0      0
ram15      0      0       0       0      0      0       0       0      0      0
loop0      0      0       0       0      0      0       0       0      0      0
loop1      0      0       0       0      0      0       0       0      0      0
loop2      0      0       0       0      0      0       0       0      0      0
loop3      0      0       0       0      0      0       0       0      0      0
loop4      0      0       0       0      0      0       0       0      0      0
loop5      0      0       0       0      0      0       0       0      0      0
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
loop6      0      0       0       0      0      0       0       0      0      0
loop7      0      0       0       0      0      0       0       0      0      0
mmcblk0  29641   8104 1682910  114617 10619563 666426 69841090 35020383      0  25842

【実行例】指定したパーティションの情報を表示

パーティション「/dev/sda1」の情報を表示します。

$ vmstat -p /dev/sda1

【実行例】メモリの統計情報を10秒間隔で表示

$ vmstat 10

【実行例】ディスクI/Oの統計情報を10秒間隔で10回表示

$ vmstat -d 1 10

【実行例】1秒間隔で更新

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 9  0      0 603676 147708 1646492    0    0     0     5    6    5  1  2 97  0  0
 5  0      0 601724 147708 1646508    0    0     0     8 2296 5291  5 94  0  0  0
 5  0      0 601328 147708 1646508    0    0     0    20 2202 4369  6 88  5  0  0
 4  0      0 600032 147708 1646508    0    0     0    40 2230 5821  7 90  3  0  0
 4  0      0 597480 147708 1646508    0    0     0     8 1991 4473 13 83  4  0  0
 4  0      0 595800 147708 1646508    0    0     0     8 2039 5160  5 95  0  0  0
 4  0      0 594116 147708 1646508    0    0     0     8 2123 5334  3 96  1  0  0
 4  0      0 592580 147708 1646508    0    0     0    24 2169 5125  4 96  0  0  0
 4  0      0 590884 147708 1646508    0    0     0    24 2361 4908  4 94  2  0  0
 4  0      0 588128 147708 1646508    0    0     0     8 2183 4730  4 93  4  0  0
 4  0      0 586836 147708 1646508    0    0     0    16 2125 4502  5 90  6  0  0

関連ページ

LinuCの試験対策と例題まとめ
LinuCの試験対策と例題(学習サイト)についてまとめました。
LPICの試験対策と例題まとめ
LPICの試験対策と例題(学習サイト)についてまとめました。
【Linux超入門】システムの基礎とよく使うコマンドなど徹底解説
Linuxシステムの基礎とよく使うコマンドなどについて入門者向けに解説します。

コメント