Linuxでメモリ、スワップ、CPU、ディスクI/Oなどの状態をまとめて確認したいときは、vmstatコマンドを使用します。
前回解説したfreeコマンドでは、メモリとスワップの現在量を確認できました。
ただ、サーバーが重いときは「メモリが足りないのか」「スワップが発生しているのか」「CPUが忙しいのか」「ディスクI/O待ちなのか」まで見ないと、原因を判断しにくいです。
そこで便利なのがvmstatです。
vmstatを使うと、メモリ、スワップ、I/O、割り込み、コンテキストスイッチ、CPU状態を1つの画面で確認できます。
この記事では、Linux初心者でも実際に使えるように、vmstatコマンドの基本、vmstat 1やvmstat 2 5の使い方、si・so・wa・r・bなど重要項目の見方、free・top・iostatとの違いまで実例付きで解説します。
- vmstatコマンドとは
- vmstatで確認できること
- vmstatコマンドの基本構文
- vmstatの基本的な実行例
- vmstatの出力項目の全体像
- procs列の見方
- r列の見方
- b列の見方
- memory列の見方
- swpd列の見方
- swap列の見方
- si・soが重要な理由
- io列の見方
- system列の見方
- cpu列の見方
- us・sy・idの見方
- wa列の見方
- st列の見方
- vmstatの最初の1行に注意
- 2秒ごとに5回表示する方法
- 単位を変更する方法
- タイムスタンプを表示する方法
- 横幅を広く表示する方法
- メモリ統計の詳細を表示する方法
- ディスク統計を表示する方法
- 特定パーティションの統計を表示する方法
- vmstatコマンドの主なオプション
- vmstatとfreeコマンドの違い
- vmstatとtopコマンドの違い
- vmstatとiostatコマンドの違い
- サーバーが重いときのvmstat確認手順
- メモリ不足を疑うvmstatの見方
- CPU負荷を疑うvmstatの見方
- ディスクI/O待ちを疑うvmstatの見方
- vmstatでよく使う実用例
- vmstatコマンドでよくある注意点
- vmstatコマンドでよくあるエラー
- よくある質問
- まとめ
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 1やvmstat 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
項目が多くて最初は難しく見えますが、初心者はまずr、b、si、so、us、sy、id、waを見れば十分です。
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使用率だけ見ると低い場合、bやwaを確認すると原因のヒントになることがあります。
memory列の見方
memoryには、メモリ関連の情報が表示されます。
| 項目 | 意味 |
|---|---|
swpd |
使用中のスワップ量 |
free |
空きメモリ量 |
buff |
バッファとして使われているメモリ量 |
cache |
キャッシュとして使われているメモリ量 |
単位は環境やオプションによって変わりますが、通常はKB単位で表示されることが多いです。
メモリの全体感を見たい場合は、前回解説したfree -hの方が分かりやすいです。
free -h
swpd列の見方
swpdは、現在使われているスワップ量を表します。
swpd
131072
swpdが0でないからといって、すぐに問題とは限りません。
重要なのは、次に説明するsiとsoが継続して発生しているかどうかです。
スワップに一部データが残っているだけなら、サーバーが今まさに苦しい状態とは限りません。
swap列の見方
swapには、スワップインとスワップアウトの動きが表示されます。
| 項目 | 意味 | 見方 |
|---|---|---|
si |
スワップからメモリへ読み戻した量 | 高い状態が続くと注意 |
so |
メモリからスワップへ書き出した量 | 高い状態が続くと注意 |
siとsoは、メモリ不足の判断で重要です。
si・soが重要な理由
siとsoは、実際にスワップが動いているかを見るための重要な項目です。
si so
0 0
siとsoが0に近い状態なら、スワップ領域はあっても、頻繁には使われていない可能性があります。
一方で、次のようにsiやsoが継続して発生している場合は注意が必要です。
si so
120 300
150 280
100 320
メモリとスワップの間でデータの出し入れが続いている状態なので、物理メモリ不足の可能性があります。
この場合は、free -hやtopで追加確認しましょう。
free -h
top
io列の見方
ioには、ブロックデバイスとの入出力が表示されます。
| 項目 | 意味 |
|---|---|
bi |
ブロックデバイスから読み込まれた量 |
bo |
ブロックデバイスへ書き込まれた量 |
biは読み込み、boは書き込みの目安です。
ディスクI/Oの詳しい確認には、iostatなどを使うこともあります。
iostat -x 1
vmstatでは、まずI/Oが多そうかどうかをざっくり見る用途に向いています。
system列の見方
systemには、割り込みやコンテキストスイッチの情報が表示されます。
| 項目 | 意味 |
|---|---|
in |
1秒あたりの割り込み回数 |
cs |
1秒あたりのコンテキストスイッチ回数 |
inやcsは、初心者が最初から深く見る必要はありません。
ただし、通常時と比べて極端に増えている場合は、システム内で細かい処理の切り替えが多く発生している可能性があります。
cpu列の見方
cpuには、CPU時間の割合が表示されます。
| 項目 | 意味 | 見方 |
|---|---|---|
us |
ユーザー処理で使われたCPU割合 | アプリ処理の負荷 |
sy |
カーネル処理で使われたCPU割合 | システム処理の負荷 |
id |
アイドル状態のCPU割合 | CPUの空き |
wa |
I/O待ちのCPU割合 | ディスク待ちの目安 |
st |
仮想環境で他のVMに使われた割合 | VPSなどで見ることがある |
初心者が特に見るべきなのは、us、sy、id、waです。
us・sy・idの見方
usは、アプリケーションなどユーザー空間の処理で使われたCPU割合です。
syは、カーネルなどシステム処理で使われたCPU割合です。
idは、CPUが何もせず空いていた割合です。
us sy id
20 5 70
この例では、CPUのうち20%がユーザー処理、5%がシステム処理、70%がアイドル状態です。
idが高ければCPUには余裕があります。
usやsyが高く、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待ちが原因でサーバーが重い可能性があります。
この場合は、iostatやiotopなどで追加確認することがあります。
st列の見方
stは、仮想環境で他の仮想マシンなどにCPU時間を取られた割合です。
VPSやクラウドサーバーで見かけることがあります。
st
5
stが高い状態が続く場合、自分のサーバー内のプロセスだけでなく、仮想化基盤側の影響を受けている可能性があります。
ただし、短時間だけ少し出る程度なら、すぐに問題とは限りません。
vmstatの最初の1行に注意
vmstat 1やvmstat 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 1、vmstat 2 5、vmstat -t 2 5です。
vmstatとfreeコマンドの違い
freeとvmstatは、どちらもメモリ確認で使いますが、見ている範囲が違います。
| コマンド | 主な用途 |
|---|---|
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状況を詳しく見る |
vmstatでwaが高い場合、次にiostat -x 1で詳しく見る流れがよく使われます。
サーバーが重いときのvmstat確認手順
サーバーが重いときは、次の流れで確認すると分かりやすいです。
1. vmstatで全体を見る
vmstat 1
2. si・soを見る
siやsoが継続して出ている場合、メモリ不足の可能性があります。
3. waを見る
waが高い場合、ディスクI/O待ちの可能性があります。
4. rを見る
rがCPUコア数に対して高い状態が続く場合、CPU待ちの可能性があります。
5. topやiostatで深掘りする
top
iostat -x 1
vmstatは原因を確定するというより、どの方向を調べるべきかを判断する入口として使うと便利です。
メモリ不足を疑うvmstatの見方
メモリ不足を疑う場合は、次の項目を見ます。
freeが少ないswpdが大きいsiやsoが継続して発生しているfree -hのavailableが少ない
特にsiとsoが継続して動いているかが重要です。
vmstat 1
free -h
スワップの出入りが続いていてサーバーが重い場合は、メモリ増強、不要プロセスの停止、アプリケーション設定の見直しなどを検討します。
CPU負荷を疑うvmstatの見方
CPU負荷を疑う場合は、次の項目を見ます。
rが高い状態が続くusやsyが高い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が高いbiやboが多い
例です。
r b bi bo us sy id wa st
0 5 8000 12000 5 3 40 52 0
waが高く、bも出ているため、ディスクI/O待ちで詰まっている可能性があります。
詳しく確認するには、iostatやiotopを使うことがあります。
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でなくても、すぐに問題とは限りません。
重要なのは、siやsoが継続して発生しているかです。
waが高いときはCPUではなくI/O待ちを疑う
waが高い場合、CPUが足りないというより、ディスクI/O待ちで処理が進んでいない可能性があります。
iostatなどで追加確認しましょう。
vmstatだけで原因プロセスは分からない
vmstatはシステム全体の傾向を見るコマンドです。
どのプロセスが原因か確認するには、topやpsを使います。
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
値が一瞬だけ高い
r、wa、si、soなどが一瞬だけ高い場合、それだけで異常とは限りません。
継続して高いか、サーバーの体感の重さと一致しているかを確認しましょう。
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待ちなどで止まっているプロセスの目安si・so:スワップの出入りus・sy・id:CPU使用状況wa:I/O待ちst:仮想環境でのCPU待ち
メモリの現在量を見たい場合はfree -h、プロセスごとの原因を見たい場合はtop、ディスクI/Oを詳しく見たい場合はiostatも組み合わせます。
free -h
top
iostat -x 1
vmstatは、サーバーが重いときに「メモリなのか、CPUなのか、ディスクI/Oなのか」を切り分ける入口として便利です。まずはvmstat 1を使い、si・so・wa・rの見方から覚えていきましょう。




コメント