vmstatコマンドとは?Linuxでメモリ・CPU・I/Oの状態を確認する方法

Linux

Linuxでメモリ、スワップ、CPU、ディスクI/Oなどの状態をまとめて確認したいときは、vmstatコマンドを使用します。

前回解説したfreeコマンドでは、メモリとスワップの現在量を確認できました。

ただ、サーバーが重いときは「メモリが足りないのか」「スワップが発生しているのか」「CPUが忙しいのか」「ディスクI/O待ちなのか」まで見ないと、原因を判断しにくいです。

そこで便利なのがvmstatです。

vmstatを使うと、メモリ、スワップ、I/O、割り込み、コンテキストスイッチ、CPU状態を1つの画面で確認できます。

この記事では、Linux初心者でも実際に使えるように、vmstatコマンドの基本、vmstat 1vmstat 2 5の使い方、sisowarbなど重要項目の見方、freetopiostatとの違いまで実例付きで解説します。

  1. vmstatコマンドとは
  2. vmstatで確認できること
  3. vmstatコマンドの基本構文
  4. vmstatの基本的な実行例
  5. vmstatの出力項目の全体像
  6. procs列の見方
  7. r列の見方
  8. b列の見方
  9. memory列の見方
  10. swpd列の見方
  11. swap列の見方
  12. si・soが重要な理由
  13. io列の見方
  14. system列の見方
  15. cpu列の見方
  16. us・sy・idの見方
  17. wa列の見方
  18. st列の見方
  19. vmstatの最初の1行に注意
  20. 2秒ごとに5回表示する方法
  21. 単位を変更する方法
  22. タイムスタンプを表示する方法
  23. 横幅を広く表示する方法
  24. メモリ統計の詳細を表示する方法
  25. ディスク統計を表示する方法
  26. 特定パーティションの統計を表示する方法
  27. vmstatコマンドの主なオプション
  28. vmstatとfreeコマンドの違い
  29. vmstatとtopコマンドの違い
  30. vmstatとiostatコマンドの違い
  31. サーバーが重いときのvmstat確認手順
    1. 1. vmstatで全体を見る
    2. 2. si・soを見る
    3. 3. waを見る
    4. 4. rを見る
    5. 5. topやiostatで深掘りする
  32. メモリ不足を疑うvmstatの見方
  33. CPU負荷を疑うvmstatの見方
  34. ディスクI/O待ちを疑うvmstatの見方
  35. vmstatでよく使う実用例
    1. 現在の状態を1回表示する
    2. 1秒ごとに表示する
    3. 2秒ごとに5回表示する
    4. タイムスタンプ付きで表示する
    5. 横幅を広くして表示する
    6. メモリ統計を一覧表示する
    7. ディスク統計を表示する
  36. vmstatコマンドでよくある注意点
    1. 最初の1行だけで判断しない
    2. swpdだけでメモリ不足と判断しない
    3. waが高いときはCPUではなくI/O待ちを疑う
    4. vmstatだけで原因プロセスは分からない
  37. vmstatコマンドでよくあるエラー
    1. command not found
    2. オプションが使えない
    3. 数字の単位が分かりにくい
    4. 値が一瞬だけ高い
  38. よくある質問
    1. vmstatコマンドは何に使いますか?
    2. 一番よく使うvmstatの形は?
    3. vmstatのsiとsoは何ですか?
    4. vmstatのwaは何ですか?
    5. vmstatのrは何ですか?
    6. vmstatの最初の1行は見なくてよいですか?
    7. freeコマンドとの違いは何ですか?
    8. topコマンドとの違いは何ですか?
    9. UbuntuやCentOS Streamでも使えますか?
  39. まとめ

vmstatコマンドとは

vmstatは、Linuxで仮想メモリ、CPU、I/O、システム状態などを表示するコマンドです。

vmstatは「virtual memory statistics」の略として扱われることが多く、メモリだけでなくCPUやディスクI/Oの状態もまとめて確認できます。

基本的には、次のように実行します。

vmstat

一定間隔で表示したい場合は、秒数を指定します。

vmstat 1

この例では、1秒ごとに状態を表示し続けます。

停止するには、Ctrl + Cを押します。

vmstatで確認できること

vmstatでは、主に次のような情報を確認できます。

  • 実行待ちプロセス数
  • 割り込み不可スリープ状態のプロセス数
  • メモリ使用状況
  • スワップ使用状況
  • スワップイン・スワップアウト
  • ディスクI/O
  • 割り込み回数
  • コンテキストスイッチ回数
  • CPU使用率
  • I/O待ちの割合

サーバーが重いときに、原因の方向性をざっくり切り分ける入口として便利です。

vmstatコマンドの基本構文

vmstatコマンドの基本構文は次のとおりです。

vmstat [オプション] [間隔] [回数]

オプションなしで実行します。

vmstat

1秒ごとに表示し続ける場合です。

vmstat 1

2秒ごとに5回だけ表示する場合です。

vmstat 2 5

サーバー監視や一時的な負荷確認では、vmstat 1vmstat 2 5をよく使います。

vmstatの基本的な実行例

vmstat 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
 1  0 131072 300000  60000 800000    0    0    20    10  120  250  5  2 92  1  0
 0  0 131072 298000  60000 802000    0    0     0    30  130  260  3  1 95  1  0
 2  0 131072 290000  60000 805000    0    0    10   200  180  400 20  5 70  5  0

項目が多くて最初は難しく見えますが、初心者はまずrbsisoussyidwaを見れば十分です。

vmstatの出力項目の全体像

vmstatの出力は、いくつかのグループに分かれています。

グループ 内容
procs プロセスの状態
memory メモリ使用状況
swap スワップの入出力
io ディスクI/O
system 割り込みやコンテキストスイッチ
cpu CPU使用率

それぞれの意味を順番に見ていきます。

procs列の見方

procsには、プロセスの状態が表示されます。

項目 意味 見方
r 実行待ちまたは実行中のプロセス数 CPU待ちの目安になる
b 割り込み不可スリープ状態のプロセス数 I/O待ちなどの目安になる

rが高い状態が続く場合、CPU待ちのプロセスが多い可能性があります。

bが高い状態が続く場合、ディスクI/O待ちなどで処理が詰まっている可能性があります。

r列の見方

rは、実行待ちまたは実行中のプロセス数を表します。

r
2

CPUコア数に対してrが高い状態が続く場合、CPUが処理待ちになっている可能性があります。

たとえば、1コアのVPSでrが常に5や10のように高い場合、CPU負荷が高い状態かもしれません。

ただし、一瞬だけ高くなる程度ならよくあります。

継続して高いかどうかを見るのがポイントです。

b列の見方

bは、割り込み不可スリープ状態のプロセス数を表します。

b
3

ざっくり言うと、ディスクI/Oなどの完了待ちで止まっているプロセスの目安になります。

bが高く、同時にwaも高い場合、ディスクI/Oが詰まっている可能性があります。

サーバーが重いのにCPU使用率だけ見ると低い場合、bwaを確認すると原因のヒントになることがあります。

memory列の見方

memoryには、メモリ関連の情報が表示されます。

項目 意味
swpd 使用中のスワップ量
free 空きメモリ量
buff バッファとして使われているメモリ量
cache キャッシュとして使われているメモリ量

単位は環境やオプションによって変わりますが、通常はKB単位で表示されることが多いです。

メモリの全体感を見たい場合は、前回解説したfree -hの方が分かりやすいです。

free -h

swpd列の見方

swpdは、現在使われているスワップ量を表します。

swpd
131072

swpdが0でないからといって、すぐに問題とは限りません。

重要なのは、次に説明するsisoが継続して発生しているかどうかです。

スワップに一部データが残っているだけなら、サーバーが今まさに苦しい状態とは限りません。

swap列の見方

swapには、スワップインとスワップアウトの動きが表示されます。

項目 意味 見方
si スワップからメモリへ読み戻した量 高い状態が続くと注意
so メモリからスワップへ書き出した量 高い状態が続くと注意

sisoは、メモリ不足の判断で重要です。

si・soが重要な理由

sisoは、実際にスワップが動いているかを見るための重要な項目です。

si so
 0  0

sisoが0に近い状態なら、スワップ領域はあっても、頻繁には使われていない可能性があります。

一方で、次のようにsisoが継続して発生している場合は注意が必要です。

si   so
120  300
150  280
100  320

メモリとスワップの間でデータの出し入れが続いている状態なので、物理メモリ不足の可能性があります。

この場合は、free -htopで追加確認しましょう。

free -h
top

io列の見方

ioには、ブロックデバイスとの入出力が表示されます。

項目 意味
bi ブロックデバイスから読み込まれた量
bo ブロックデバイスへ書き込まれた量

biは読み込み、boは書き込みの目安です。

ディスクI/Oの詳しい確認には、iostatなどを使うこともあります。

iostat -x 1

vmstatでは、まずI/Oが多そうかどうかをざっくり見る用途に向いています。

system列の見方

systemには、割り込みやコンテキストスイッチの情報が表示されます。

項目 意味
in 1秒あたりの割り込み回数
cs 1秒あたりのコンテキストスイッチ回数

incsは、初心者が最初から深く見る必要はありません。

ただし、通常時と比べて極端に増えている場合は、システム内で細かい処理の切り替えが多く発生している可能性があります。

cpu列の見方

cpuには、CPU時間の割合が表示されます。

項目 意味 見方
us ユーザー処理で使われたCPU割合 アプリ処理の負荷
sy カーネル処理で使われたCPU割合 システム処理の負荷
id アイドル状態のCPU割合 CPUの空き
wa I/O待ちのCPU割合 ディスク待ちの目安
st 仮想環境で他のVMに使われた割合 VPSなどで見ることがある

初心者が特に見るべきなのは、ussyidwaです。

us・sy・idの見方

usは、アプリケーションなどユーザー空間の処理で使われたCPU割合です。

syは、カーネルなどシステム処理で使われたCPU割合です。

idは、CPUが何もせず空いていた割合です。

us sy id
20  5 70

この例では、CPUのうち20%がユーザー処理、5%がシステム処理、70%がアイドル状態です。

idが高ければCPUには余裕があります。

ussyが高く、idが低い状態が続く場合は、CPU負荷が高い可能性があります。

wa列の見方

waは、I/O待ちの割合です。

wa
25

waが高い状態が続く場合、CPUそのものではなく、ディスクI/O待ちで処理が進んでいない可能性があります。

たとえば、次のような状態です。

r  b   si  so   bi    bo  us sy id wa st
0  4    0   0 5000  8000   5  2 40 53  0

この例では、waが53と高く、bも4あります。

ディスクI/O待ちが原因でサーバーが重い可能性があります。

この場合は、iostatiotopなどで追加確認することがあります。

st列の見方

stは、仮想環境で他の仮想マシンなどにCPU時間を取られた割合です。

VPSやクラウドサーバーで見かけることがあります。

st
5

stが高い状態が続く場合、自分のサーバー内のプロセスだけでなく、仮想化基盤側の影響を受けている可能性があります。

ただし、短時間だけ少し出る程度なら、すぐに問題とは限りません。

vmstatの最初の1行に注意

vmstat 1vmstat 2を実行したとき、最初の1行は起動後からの平均値に近い情報として表示されることがあります。

そのため、現在の状態を見たい場合は、2行目以降を重視します。

vmstat 1

例です。

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 131072 300000  60000 800000    5    2   100    80  120  250  3  1 95  1  0
 0  0 131072 298000  60000 802000    0    0     0    30  130  260  2  1 96  1  0
 0  0 131072 297000  60000 803000    0    0     0    20  125  255  2  1 96  1  0

現在の状況を判断する場合は、2行目以降の変化を見るようにしましょう。

2秒ごとに5回表示する方法

一定回数だけ表示したい場合は、間隔と回数を指定します。

vmstat 2 5

この例では、2秒ごとに5回表示して終了します。

一時的に状態を確認したい場合に便利です。

ずっと表示し続けたい場合は、回数を省略します。

vmstat 2

単位を変更する方法

-Sオプションを使うと、メモリ表示の単位を指定できます。

MB単位で表示したい場合です。

vmstat -S M 1

KB単位で表示したい場合です。

vmstat -S K 1

ただし、メモリ量を分かりやすく見るだけならfree -hも使いやすいです。

free -h

タイムスタンプを表示する方法

-tオプションを使うと、各行に時刻を表示できます。

vmstat -t 2 5

実行結果の例です。

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 UTC
 0  0 131072 298000  60000 802000    0    0     0    30  130  260  2  1 96  1  0 2026-07-20 10:00:01
 0  0 131072 297000  60000 803000    0    0     0    20  125  255  2  1 96  1  0 2026-07-20 10:00:03

ログとして残したい場合や、時間ごとの変化を見たい場合に便利です。

横幅を広く表示する方法

-wオプションを使うと、出力の横幅が広がり、見やすくなる場合があります。

vmstat -w 1

項目が詰まって読みにくい場合に使うと便利です。

メモリ統計の詳細を表示する方法

-sオプションを使うと、メモリ関連の統計を一覧表示できます。

vmstat -s

実行結果の例です。

      2030704 K total memory
       870000 K used memory
       300000 K free memory
        60000 K buffer memory
       800000 K swap cache
      2097148 K total swap
       131072 K used swap
      1966076 K free swap

普段の確認ではfree -hの方が読みやすいですが、詳細な統計を確認したいときに使えます。

ディスク統計を表示する方法

-dオプションを使うと、ディスク統計を表示できます。

vmstat -d

ただし、ディスクI/Oを詳しく調べたい場合は、iostatの方が見やすいことも多いです。

iostat -x 1

vmstatでは全体の傾向を見て、詳しいディスク調査はiostatへ進むと分かりやすいです。

特定パーティションの統計を表示する方法

-pオプションを使うと、指定したパーティションの統計を表示できます。

vmstat -p /dev/sda1

環境によって表示内容は異なりますが、読み書き回数などを確認できます。

対象デバイス名はlsblkで確認します。

lsblk

vmstatコマンドの主なオプション

オプション 説明
-S 単位 メモリ表示の単位を指定する
-s メモリ統計を一覧表示する
-d ディスク統計を表示する
-p デバイス 指定パーティションの統計を表示する
-w 横幅を広く表示する
-t タイムスタンプを表示する
-V バージョン情報を表示する
--help ヘルプを表示する

初心者がまず覚えるべきなのは、vmstat 1vmstat 2 5vmstat -t 2 5です。

vmstatとfreeコマンドの違い

freevmstatは、どちらもメモリ確認で使いますが、見ている範囲が違います。

コマンド 主な用途
free メモリとスワップの現在量を見やすく確認する
vmstat メモリ、スワップ、CPU、I/Oの動きを確認する

メモリの空きやavailableを見たい場合はfree -hが分かりやすいです。

スワップの出入りやCPU待ち、I/O待ちも含めて見たい場合はvmstatが便利です。

vmstatとtopコマンドの違い

topは、プロセスごとのCPU使用率やメモリ使用率をリアルタイムで確認するコマンドです。

vmstatは、システム全体の状態を軽く見るコマンドです。

コマンド 主な用途
vmstat システム全体のメモリ・CPU・I/O傾向を見る
top どのプロセスがCPUやメモリを使っているか見る

まずvmstatで全体傾向を見て、原因プロセスを探すときにtopを使う流れが分かりやすいです。

vmstatとiostatコマンドの違い

iostatは、CPU統計とディスクI/O統計を詳しく確認するコマンドです。

vmstatでもI/Oの傾向は見られますが、ディスクごとの詳細を確認するならiostatが向いています。

コマンド 主な用途
vmstat システム全体のI/O待ちや傾向を見る
iostat ディスクごとのI/O状況を詳しく見る

vmstatwaが高い場合、次にiostat -x 1で詳しく見る流れがよく使われます。

サーバーが重いときのvmstat確認手順

サーバーが重いときは、次の流れで確認すると分かりやすいです。

1. vmstatで全体を見る

vmstat 1

2. si・soを見る

sisoが継続して出ている場合、メモリ不足の可能性があります。

3. waを見る

waが高い場合、ディスクI/O待ちの可能性があります。

4. rを見る

rがCPUコア数に対して高い状態が続く場合、CPU待ちの可能性があります。

5. topやiostatで深掘りする

top
iostat -x 1

vmstatは原因を確定するというより、どの方向を調べるべきかを判断する入口として使うと便利です。

メモリ不足を疑うvmstatの見方

メモリ不足を疑う場合は、次の項目を見ます。

  • freeが少ない
  • swpdが大きい
  • sisoが継続して発生している
  • free -havailableが少ない

特にsisoが継続して動いているかが重要です。

vmstat 1
free -h

スワップの出入りが続いていてサーバーが重い場合は、メモリ増強、不要プロセスの停止、アプリケーション設定の見直しなどを検討します。

CPU負荷を疑うvmstatの見方

CPU負荷を疑う場合は、次の項目を見ます。

  • rが高い状態が続く
  • ussyが高い
  • idが低い

例です。

r  b  us sy id wa st
8  0 80 10  8  2  0

CPUがかなり使われており、実行待ちも多い状態です。

どのプロセスが原因か確認するには、topを使います。

top

ディスクI/O待ちを疑うvmstatの見方

ディスクI/O待ちを疑う場合は、次の項目を見ます。

  • bが高い
  • waが高い
  • biboが多い

例です。

r  b   bi    bo  us sy id wa st
0  5 8000 12000   5  3 40 52  0

waが高く、bも出ているため、ディスクI/O待ちで詰まっている可能性があります。

詳しく確認するには、iostatiotopを使うことがあります。

iostat -x 1

vmstatでよく使う実用例

現在の状態を1回表示する

vmstat

1秒ごとに表示する

vmstat 1

2秒ごとに5回表示する

vmstat 2 5

タイムスタンプ付きで表示する

vmstat -t 2 5

横幅を広くして表示する

vmstat -w 1

メモリ統計を一覧表示する

vmstat -s

ディスク統計を表示する

vmstat -d

vmstatコマンドでよくある注意点

最初の1行だけで判断しない

vmstat 1などで表示される最初の1行は、現在だけでなく起動後の平均に近い情報として出ることがあります。

現在の状態を見る場合は、2行目以降を確認しましょう。

swpdだけでメモリ不足と判断しない

swpdが0でなくても、すぐに問題とは限りません。

重要なのは、sisoが継続して発生しているかです。

waが高いときはCPUではなくI/O待ちを疑う

waが高い場合、CPUが足りないというより、ディスクI/O待ちで処理が進んでいない可能性があります。

iostatなどで追加確認しましょう。

vmstatだけで原因プロセスは分からない

vmstatはシステム全体の傾向を見るコマンドです。

どのプロセスが原因か確認するには、toppsを使います。

top
ps aux --sort=-%mem | head

vmstatコマンドでよくあるエラー

command not found

vmstat: command not found

vmstatがインストールされていない可能性があります。

UbuntuやDebianでは、procpsパッケージに含まれることが多いです。

sudo apt install procps

CentOS Stream、Rocky Linux、AlmaLinuxなどでは、procps-ngを確認します。

sudo dnf install procps-ng

オプションが使えない

Linuxディストリビューションやvmstatのバージョンによって、利用できるオプションが異なる場合があります。

ヘルプを確認します。

vmstat --help

数字の単位が分かりにくい

vmstatのメモリ表示は、環境によって初心者には読みづらいことがあります。

単位を指定したい場合は-Sを使います。

vmstat -S M 1

メモリ量を見やすく確認したいだけなら、free -hも使いましょう。

free -h

値が一瞬だけ高い

rwasisoなどが一瞬だけ高い場合、それだけで異常とは限りません。

継続して高いか、サーバーの体感の重さと一致しているかを確認しましょう。

vmstat 1

よくある質問

vmstatコマンドは何に使いますか?

Linuxでメモリ、スワップ、CPU、I/O、システム状態をまとめて確認するために使います。

一番よく使うvmstatの形は?

1秒ごとに表示するvmstat 1や、2秒ごとに5回表示するvmstat 2 5がよく使われます。

vmstat 1
vmstat 2 5

vmstatのsiとsoは何ですか?

siはスワップからメモリへ読み戻した量、soはメモリからスワップへ書き出した量です。継続して発生している場合、メモリ不足の可能性があります。

vmstatのwaは何ですか?

waはI/O待ちの割合です。高い状態が続く場合、ディスクI/O待ちで処理が詰まっている可能性があります。

vmstatのrは何ですか?

rは実行待ちまたは実行中のプロセス数です。CPUコア数に対して高い状態が続く場合、CPU待ちの可能性があります。

vmstatの最初の1行は見なくてよいですか?

最初の1行は起動後の平均に近い情報として表示されることがあります。現在の状態を見たい場合は、2行目以降の変化を重視しましょう。

freeコマンドとの違いは何ですか?

freeはメモリとスワップの現在量を見やすく表示します。vmstatはメモリ、スワップ、CPU、I/Oの動きをまとめて確認できます。

topコマンドとの違いは何ですか?

vmstatはシステム全体の傾向を見るコマンドです。topはプロセスごとのCPU・メモリ使用状況を確認するコマンドです。

UbuntuやCentOS Streamでも使えますか?

はい。Ubuntu、Debian、CentOS Stream、Rocky Linux、AlmaLinuxなど、多くのLinuxディストリビューションで利用できます。

まとめ

vmstatコマンドは、Linuxでメモリ、スワップ、CPU、I/O、システム状態をまとめて確認するためのコマンドです。

基本的な使い方は次のとおりです。

vmstat

1秒ごとに表示する場合は、次のように実行します。

vmstat 1

2秒ごとに5回だけ表示する場合は、次のように実行します。

vmstat 2 5

タイムスタンプ付きで確認したい場合は、-tを使います。

vmstat -t 2 5

vmstatを見るときは、特に次の項目を意識しましょう。

  • r:CPU待ちの目安
  • b:I/O待ちなどで止まっているプロセスの目安
  • siso:スワップの出入り
  • ussyid:CPU使用状況
  • wa:I/O待ち
  • st:仮想環境でのCPU待ち

メモリの現在量を見たい場合はfree -h、プロセスごとの原因を見たい場合はtop、ディスクI/Oを詳しく見たい場合はiostatも組み合わせます。

free -h
top
iostat -x 1

vmstatは、サーバーが重いときに「メモリなのか、CPUなのか、ディスクI/Oなのか」を切り分ける入口として便利です。まずはvmstat 1を使い、sisowarの見方から覚えていきましょう。

コメント

タイトルとURLをコピーしました