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 3 0 387560 62140 44 348320 1 2 94 20 90 15 1 1 98 0 0
vmstat 出力の読み方
vmstat の出力には、メモリ統計だけではありません。 iostat および mpstat と同様に、vmstat は interval および count 引数を受け入れます。次の例では、5 秒間隔で 3 つのレポートを実行します:
# vmstat 5 3 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 384120 68604 8088 327332 1 2 90 20 90 14 1 1 98 0 0 1 0 384120 68604 8088 327364 0 0 0 0 91 179 1 0 99 0 0 0 0 384120 68232 8088 327364 0 0 0 0 107 190 1 1 98 0 0
出力は次の 6 つのセクションに分かれています。
1.手続き
2.メモリ
3.スワップ
4. io
5.システム
6. CPU
手続き
最初の 2 つの列は、プロセスに関する情報を提供します:
r | 待機状態にあるプロセスの数。これらのプロセスは実行を待っているだけで、何もしていません。 |
b | 最後の更新以降にスリープ モードで中断されたプロセスの数 |
メモリ
次の 4 つの列は、メモリに関する情報を示します。
swpd | 使用されている仮想メモリの量 |
無料 | アイドル メモリの量 |
バフ | バッファとして使用されるメモリの量 |
キャッシュ | キャッシュとして使用されるメモリの量 |
スワップ
次の 2 つの列は、スワップに関する情報を提供します:
si | ディスクからスワップインされたメモリの量 (1 秒あたり) |
そう | ディスクにスワップアウトされたメモリの量 (1 秒あたり) |
ゼロ以外の si そしてそう 数値は、十分な物理メモリがなく、カーネルがメモリをディスクにスワップしていることを示しています。
イオ
最初の 2 列は、I/O (入出力) に関する情報を提供します:
bi | ブロック デバイスから受信した 1 秒あたりのブロック数 |
ボ | ブロック デバイスに送信された 1 秒あたりのブロック数 |
システム
次の 2 つの列には、次のシステム情報が表示されます:
in | クロックを含む 1 秒あたりの割り込み数 |
cs | 1 秒あたりのコンテキスト スイッチの数 |
CPU
最後の 5 列は、合計 CPU 時間のパーセンテージを示します:
私たち | ユーザー プロセスに費やされた CPU サイクルの割合 |
sy | システム (カーネル) プロセスに費やされた CPU サイクルの割合 |
ID | アイドル状態で費やされた CPU サイクルの割合 |
は | I/O の待機に費やされた CPU サイクルの割合 |
st | 仮想マシンから盗まれた CPU サイクルの割合 |
コマンドライン オプション
vmstat コマンドにさまざまなオプションを指定すると、追加情報を含めることができます。コマンドライン オプションの一部を以下に示します:
-a | アクティブおよび非アクティブなメモリを表示します。 |
-f | ブート以降のフォーク数を表示します。 |
-t | 出力にタイム スタンプを追加します。 |
-d | ディスク統計を報告します。 |
CPU のボトルネック
vmstat の出力には、CPU パフォーマンスに関連する 2 つの重要な領域があります。最初は r です 桁。出力の最初の列です。これには、vmstat が実行された過去の間隔中に実行キューにあったスレッドの数に対応する値が含まれています。これらのスレッドは、実行のために CPU が使用可能になるのを待っていました。ここで適切な最大数についてはいくつかの考え方がありますが、ほとんどの人は、システム上の CPU 数の 2 倍から 5 倍以上がボトルネックになることに同意しています (この見積もりは、マルチコア CPU に合わせて調整する必要があります)。 /P>
CPU 関連のデータを探す 2 番目の場所は、出力の右側の列です。 us (ユーザー) 時間、sy (システム) 時間、id (アイドル) 時間の 3 つの列があります。これら 3 つは、CPU 時間の使用率をパーセンテージで分類します。合計すると 100% になります。理想的には、CPU はほとんどの時間を us および id カテゴリで費やします。 sy カテゴリは、CPU がドライバー/カーネル レベルの作業に費やす時間を指します。この時間は、ユーザー アプリケーションから奪われます。 CPU がこのカテゴリでほとんどの時間を費やしている場合は、CPU またはメモリのボトルネック、カーネルレベルのロックの問題、またはその他の問題が原因で過度のコンテキスト切り替えが発生している可能性があります。ビジー状態のシステムでは、ゼロに近い一定のアイドル率が示されます。ただし、システムがビジー状態であっても、システムが過負荷になっているとは限りません。
ディスク / IO パフォーマンス
vmstat ユーティリティでは、どのディスクにボトルネックがあるかはわかりませんが、全体的に IO の問題があるかどうかはわかります。出力で重要な列は b (ブロックされた) 列です。これは、ブロックされた、または過去の間隔で IO の完了を待機していたスレッドの数を示します。ほとんどの場合、b 列は 0 である必要があります。その列に常にゼロ以外の数値がある場合は、iostat でさらに調査できます。
メモリのボトルネック
メモリ関連の問題の分析は、4 列目にある vmstat の出力で空きメモリの量を確認することから始める必要があります。空きメモリが少ない場合は、どのプロセスがより多くのメモリを消費しているかをさらに調査する必要があります。
結論
vmstat コマンドは、パフォーマンスの問題をトリアージするための便利なツールです。問題をさらに詳しく診断するために、どのサブシステムをより詳しく調べる必要があるかがわかります。
iostat を使用して Linux でシステム パフォーマンスを監視する (例を含む)