stat系コマンドさわり

概要

よくわからないけどPCが重い。アプリケーションが応答しなくなったなど今PC内部で何が起こっているのかざっくり把握したい。
今回はそんな時に役に立つ統計情報を確認できるstat系コマンドについて解説する。

ちなみに今回解説する内容はCentOS6.6でのものに限定し、他のディストリビューションで同じような解釈ができるかどうかは保証しません。

vmstat

vmstatのvmはvirtual memoryであり、仮想メモリの統計情報について表示することのできるプログラムである。

manコマンドをかいつまんで概要を把握する。

vmstatはプロセス、メモリ、ページング、ブロッキングIO、CPU使用率に関するレポート情報を表示する。
最初のレポートに関しては最後に再起動された瞬間からの平均値を表示し、追加で表示されるレポートに関しては特定の時間を定めその間に抽出したデータを元に統計を表示する。
プロセスとメモリの統計情報に関しては常にその時の状態が表示される。

VMモードで表示される項目

  • Procs
  • r : 実行を待っているプロセスの数
    b : 割り込み不可能なスリープ状態にあるプロセスの数

  • Memory
  • swpd : 使用されている仮想メモリの総量
    free : 使用されていないメモリの総量
    buff : バッファとして使用されているメモリの総量(カネールバッファ)
    cache : キャッシュとして使用されているメモリの総量(ページキャッシュ)
    inact : 非アクティブなメモリの総量
    active : アクティブなメモリの総量

  • Swap
  • si : ディスクからスワップインされたメモリの総量
    so : ディスクへとスワップアウトされたメモリの総量

  • IO
  • bi : ブロックデバイスから取得した秒間ブロック数
    bo : ブロックデバイスへと送信した秒間ブロック数

  • System
  • in : 秒間の割り込み数
    cs : 秒間のコンテキストスイッチ数

  • CPU
  • us : user time. アプリケーションコードが消費した時間
    sy : system time. カーネルコードが消費した時間
    id : アイドル時間。linux 2.5.41以上ではio待ちも含む
    wa : io待ちの時間。linux 2.5.41以上ではidに含まれる
    st : linux2.6.11以上ではvirtual machineに消費した時間

    vmstatという名前の割にはわりかしCPUの状態からシステムのボトルネックの場所を把握することに用いられるように思う。

    iostat

    CPUの使用状況やデバイス、パーティション、NFSごとに入出力の統計情報を表示する。
    vmstatと比較するとCPUの情報が出力されるところは似たようなところがあるが、入出力に関しては複数のデバイスごとに表示が確認できるため
    より詳細なIOボトルネックを確認したい場合には有効に働きそうである。

    またちょっとmanコマンドの説明を確認する。
    デバイスごとにその平均転送レートから入出力状況についてモニタリングを行う。
    これによって物理的なディスクの入出力とバランスをとるためにシステムの設定を最適化することができる。
    iostatを実行して初めに表示される項目はシステムを再起動してからの統計情報を表示する。
    その後のそれぞれの出力に関しては前回のレポート集計後について集計を行う。

    特にvmstatから特筆して異なるような使い方はありません。

    mpstat

    これも同様にCPUの使用状況などをコア別に詳細に確認することができるようになります。
    vmstatやtopでもボトルネックが特定できなかった時などに使用すると良いと思います。

    と…

    dstat

    これ便利。ちなみにpythonで書かれている。
    iostat, vmstat両方で確認できる内容がほぼそのまま確認できます。
    しかも色付きだし、表示が見やすく整形されている。(vmstatはなんか表示崩れてて見難い)

    おまけに–top-cpuや–top-cputimeなどのオプションを使用することで、その瞬間での最もcpu使用率の高いプロセスなどが表示されます。
    エッジが立っているようなプロセスの監視を行いたいときなどは便利かも。

    まとめ

    さくっと使ってみた間隔としては
    とりあえずdstatで大雑把に見る。プロセス単位で見たい場合はやはりtopコマンドが良さそうです。


    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">