RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【vmstat コマンド】Linuxシステム上で仮想メモリの統計情報を確認する

はじめに

はじめまして。インフラエンジニアの 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サーバエンジニアにとって重要なモニタリングツールです。リソース使用状況のトラブルシューティングや最適化にとても有効だと考えます。
ただし、オプションや実行結果を理解し、覚えることはなかなか難しいと思います。
コマンドを実行する環境があるのであれば、実際にコマンドを実行することで、オプション、結果にふれてみるのも良いと思います。

参考文献

Copyright © RAKUS Co., Ltd. All rights reserved.