はじめに
はじめまして。インフラエンジニアの rkyohei です。
Linuxサーバの運用やモニタリングにおいて、性能チューニングやトラブルシューティングにはさまざまコマンドを使用すると思います。その中でも、特にリソース使用状況を詳細に分析するために便利なツールの1つが「vmstat」となります。
vmstatコマンドの存在自体は知っていたけど、オプション、実行結果の見方についてあまり知らなかったのですが、先日業務で使用する機会があり、vmstatコマンドについて調べましたのでこのエンジニアブログでみなさんにご紹介したいと思います。
vmstatとは何か?
vmstatとは Virtual Memory Statistics の略であり、Linuxシステム上で仮想メモリの統計情報を表示するコマンドです。
vmstatコマンドの基本的な使い方
vmstatコマンドの基本的な使い方についてご紹介します。
vmstat [オプション] [間隔(sec) [回数] ] ※[ ] は省略可能です
- オプション: ここではvmstatコマンドのオプションについて一部ご紹介します。
オプション | 説明 |
---|---|
-a | 仮想メモリの詳細情報を表示します。プロセスのステート(実行中、スリープ中など)、ページング、メモリ情報などが含まれます。 |
-s | 仮想メモリの統計情報のみを表示します。各種メモリスタット、ページング、スワップ情報などが表示されます。 |
-d | ブロックデバイスのIO統計情報を表示します。IOのバイト数、リクエスト数、転送時間などが表示されます。 |
-D | ディスクの統計情報を1項目1行で表示します。 |
-p <パーティション> | 指定したパーティションに関する情報を表示します。パーティションを指定して詳細情報を取得することができます。 |
-S 単位 | 単位をk,K,m,Mで指定します。 |
-t | タイムスタンプを表示します。 |
これらのオプションを使用することで、さまざまな情報を取得することができます。例えば、仮想メモリの詳細情報や統計情報、ブロックデバイスのIO統計情報などを利用して、システムの性能やリソース使用状況をより詳細に分析できます。
上記以外にもオプションはありますので、オプションの詳細について興味がある方は、man
コマンドを使用してマニュアルページを参照していただければと思います。
- 更新間隔: デフォルトでは1秒ごとに情報が表示されますが、必要に応じて変更できます。
- 表示回数: 指定回数だけ情報を表示した後にコマンドが終了します。
vmstatコマンド実行結果の見方
vmstatコマンドの実行結果の見方について、以下にご紹介いたします。ここではvmstatコマンドをオプション無しで実行した結果を例としています。
# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 123088 154496 0 1168484 0 0 0 1 1 1 0 0 100 0 0
区分 | 値 | 意味 |
---|---|---|
procs | r | 現在実行待ちのプロセス数。CPUが過負荷であるかどうかを示す指標です。 |
b | スリープ中のプロセス数。スリープ中のプロセスはI/Oの完了を待っています。 | |
memory | swpd | スワップされたページの数。スワップの量を示す指標です。 |
free | 使用されていないメモリの量。大きな値が望ましいです。 | |
buff | ファイルの読み取り結果としてキャッシュされているメモリ量。 | |
cache | ファイルシステムがキャッシュしているページの量。メモリ使用効率の指標。 | |
swap | si | スワップ領域からメモリにページが転送された回数。 |
so | メモリからスワップ領域にページが転送された回数。 | |
io | bi | ブロックデバイスから受け取ったブロック。(blocks/s) |
bo | ブロックデバイスに送られたブロック。(blocks/s) | |
system | in | 1秒あたりの割り込みの数。ハードウェアの負荷を示す。 |
cs | 1秒あたりのコンテキストスイッチ(プロセスの切り替え)の数。 | |
cpu | us | ユーザープロセスが消費したCPU時間。 |
sy | カーネルプロセスが消費したCPU時間。 | |
id | アイドル状態のCPU時間。高いほどCPUがアイドルであることを示します。 | |
wa | ディスクI/Oの待機時間。ディスクへのアクセスが遅い場合に増加します。 | |
st | 仮想マシンから盗まれた時間を示します。 |
vmstatコマンドの実行例
vmstatコマンドの実行例と結果についていくつかご紹介します。
1. vmstatコマンドのみでの実行例
vmstatコマンドをオプション無しで実行すると、1回のみ結果が表示されます。
# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 123088 154496 0 1168484 0 0 0 1 1 1 0 0 100 0 0
2. 更新間隔、表示回数を含めた実行例
以下のように実行することで更新間隔、表示回数を指定することができます。ここでは1秒間隔で5回実行されるように指定しています。
また -t
オプションを併せて使用することでタイムスタンプを結果に表示させることもできます。おそらくトラブルシューティングの際には問題となる事象が再発するまでコマンドを継続して実行する必要があり、cronで定期的に実行したり、引数を使用して実行状態のまま経過監視すると思います。
TeraTerm等のログ保存設定にタイプスタンプを付与することも可能ですが、 -t
オプションを使用しタイムスタンプを表示することで問題が発生した時間のログを探しやすくなります。
# vmstat 1 5 -t 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 123088 154320 0 1168484 0 0 0 1 1 1 0 0 100 0 0 2023-08-28 12:17:49 1 0 123088 154224 0 1168484 0 0 0 0 141 202 1 0 100 0 0 2023-08-28 12:17:50 0 0 123088 154224 0 1168484 0 0 0 0 150 218 0 0 100 0 0 2023-08-28 12:17:51 0 0 123088 154256 0 1168484 0 0 0 0 128 189 0 0 100 0 0 2023-08-28 12:17:52 0 0 123088 154256 0 1168484 0 0 0 0 139 192 0 1 100 0 0 2023-08-28 12:17:53
3. -s
オプション(メモリ統計情報の表示)を使用した実行例
-s
オプションを使用することでメモリの統計情報を1項目1行で表示することができます。
# vmstat -s 1728000 K total memory 405420 K used memory 621268 K active memory 539020 K inactive memory 153972 K free memory 0 K buffer memory 1168608 K swap cache 2097148 K total swap 123088 K used swap 1974060 K free swap 3091882 non-nice user cpu ticks 135539 nice user cpu ticks 1694588 system cpu ticks 2524043051 idle cpu ticks 59367 IO-wait cpu ticks 1517573 IRQ cpu ticks 1268497 softirq cpu ticks 487644 stolen cpu ticks 9009973 pages paged in 20842448 pages paged out 74510 pages swapped in 207951 pages swapped out 1668051957 interrupts 2180661177 CPU context switches 1680577615 boot time 393160 forks
4. -d
オプション(ディスクI/O統計情報の表示)を使用した実行例
-d
オプションを使用することでディスクI/Oの統計情報を表示することができます。ディスクの性能評価やトラブルシューティングに役立つ情報を確認することができます。
# vmstat -d disk- ------------reads------------ ------------writes----------- -----IO------ total merged sectors ms total merged sectors ms cur sec sda 238129 21641 18019946 506118 893700 503648 41682672 4461928 0 2138 sr0 9 0 3 2 0 0 0 0 0 0 dm-0 181053 0 17319481 448718 1182573 0 40014120 8384242 0 2099 dm-1 74608 0 600776 58836 207951 0 1663608 8075290 0 42
ディスクI/Oの統計情報では3つの項目が表示されます。それぞれ読み取り(reads)と書き込み(writes)、実行中のI/Oです。各項目中のmsとsecは合計時間を示しています。
最後に
vmstatコマンドは、Linuxサーバエンジニアにとって重要なモニタリングツールです。リソース使用状況のトラブルシューティングや最適化にとても有効だと考えます。
ただし、オプションや実行結果を理解し、覚えることはなかなか難しいと思います。
コマンドを実行する環境があるのであれば、実際にコマンドを実行することで、オプション、結果にふれてみるのも良いと思います。