vmstatをつかってみる

はじめに

vmstatというコマンドは名前は聞いたことあったのですが、あんまり使ったことなかったのでちゃんと使えるようになりたいと思ってちょっとまとめてみようかと思います。

vmstatとは

vmstatコマンドはLinuxなどのOSでプロセス、メモリー、ページング、ブロックIO、ディスク、CPUアクティビティなどの統計情報を取得すためのコマンドです。
最初の出力では、PCがブートされてからの平均値の統計情報が出力され、続く出力はコマンドで指定される期間での情報を出力します。

使い方

動作環境

今回、コマンドを動作させる環境は以下の通り

$ uname -srvmpio
Linux 5.4.0-65-generic #73-Ubuntu SMP Mon Jan 18 17:25:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release  -a
LSB Version:    core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:    20.04

基本的な構文

基本的には以下の構文を取ります。

$ vmstat [options] [delay [count]]

ここで、delayでは情報の出力の間隔、countでは 例えば、以下のような実行では、1秒の間隔での出力を4回繰り返します。

$ vmstat 1 4
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      0 22358960 1103068 5680548    0    0    11    23   99   10 15  4 80  0  0
 0  0      0 22361072 1103068 5678012    0    0     0     0  545 1324  1  1 98  0  0
 0  0      0 22351748 1103076 5675704    0    0     0    48  799 2035  3  1 95  1  0
 1  0      0 22365932 1103084 5663560    0    0     0    48 1060 2647  4  1 94  0  0

ここで、 delaycount両方、もしくはcountのみ省略することが可能で、両方を省略した場合、最後に起動してからの平均値を一回のみ出力し、countを省略した場合は

# 起動時からの平均を一回のみ出力
$ 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      0 23076780 1106336 5189788    0    0    10    23  100   18 15  4 81  0  0


# 1秒間に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
 0  0      0 23088852 1106396 5181076    0    0    10    23  100   19 15  4 81  0  0
 4  0      0 23061588 1106396 5196904    0    0     0     0  751 1929  3  1 96  0  0
 0  0      0 23072540 1106396 5202800    0    0     0    64 2225 5278  7  1 92  0  0
 1  0      0 23076960 1106396 5200228    0    0     0     0 1398 2723  3  0 97  0  0
 0  0      0 23077212 1106420 5200048    0    0     0   792  675 1625  2  1 98  0  0
 0  0      0 23094096 1106420 5193604    0    0     0     0  590 1443  2  0 98  0  0
 1  0      0 23098632 1106420 5193620    0    0     0     0  625 1338  2  0 98  0  0
 0  0      0 23103672 1106420 5188916    0    0     0    52  592 1369  1  1 98  0  0
・
・
・
・

各出力項目の意味

以下に基本的な各出力項目の意味をまとめます。

  • prpcs
    • r : 実行可能な待ちプロセス
    • b : 割り込み不可能なスリープ状態のプロセス
  • Memory
    • swpd : 利用されている仮想メモリの合計値
    • free : アイドル状態のメモリの合計値
    • buff : バッファーとして利用されているメモリの合計値
    • cache : キャッシュとして利用されているメモリの合計値
    • inact : インアクティブな状態のメモリの合計値(-a オプション指定時)
    • active : アクティブな状態メモリの合計値(-a オプション指定時)
  • Swap
    • si : ディスクからスワップインされたメモリの合計値(/s)
    • so : ディスクにスワップされたメモリの合計値(/s)
  • IO
    • bi : ブロックディバイスから受け取ったブロックの数 (blocks/s)
    • bo : ブロックディバイスに送ったブロック数(blocks/s)
  • System
  • CPU
    • us : non-kernelコードを実施している時間
    • sy : kernalコードを実施している時間
    • id : アイドル時間
    • wa : IOの待ち時間(Linux 2.5.41以上はアイドル時間を含む)
    • st : Virtual Machineによって取られる時間

オプションの一覧

以下にオプションの一覧をまとめます。

オプション 説明
-a, --active アクティブとインアクティブのメモリの総量を表示
-f, --forks 起動時からのフォークの数を出力。forkとvfork(子プロセスを起動し親プロセスを停止)、clone system callsがカウントされる。作成されたタスクの合計値と同数になる。このオプションを指定指定した場合一回のみの出力が行われる
-m, --slabs Slab(カーネルのキャッシュ)情報を出力
-n, --one-header 初回に一回のみのヘッダー表示
-d, --disk ディスクの統計情報を表示
-D, --disk-sum ディスクアプティビティのサマリを出力
-p, --partition [device] パーティションの詳細情報の表示
-S, --unit [character] 出力単位を指定。1000(k)、1024(K)、1000000(m)、1048576 (M) バイト
-t, --timestamp タイムスタンプの出力
-w, --wide ワイドアプトプット
-V, --version バージョン情報の表示
-h, --help ヘルプの表示