OXY NOTES

サーバリソースをリアルタイムに監視するdstatのインストールと使い方

リソース監視なら、stat系の王様「dstat」を利用しよう

あれ?サーバが重いかも?
そんなときは「とりあえずtopコマンド」という方も多いと思います。次はvmstatで、それでもわからなければnetstatを…。といくつもコマンドを打つのも億劫です。

そんなときには1つのコマンドでサーバ全体のリソースを監視することのできるdstatがお勧めです

せっかくなので今流行りのログ収集とグラフ化を行うGrowthForecastFluentdについても合わせて解説します。
長くなりそうなので全3回に渡って解説する予定です。

以下、最終的にグラフ化したイメージ


目次

dstatのインストール
dstatの使い方
dstatのオプションの詳細と利用方法
外部プラグインの利用方法
よく使う項目をショートカット登録


dstatのインストール

環境はCentOSの6.5を想定して解説を進めます。
dstatは公式のリポジトリでサポートしているのでyumで簡単にインストールできます。

# yum install dstat
(省略)
Dependencies Resolved

================================================================================
 Package         Arch             Version                  Repository      Size
================================================================================
Installing:
 dstat           noarch           0.7.0-1.el6              base           144 k

Transaction Summary
================================================================================
Install       1 Package(s)
(省略)

これだけで使えるようになります。簡単ですね。


dstatの使い方

使い方もいたって簡単。以下のように打ってみてください。

# dstat

すると以下のように表示されると思います。ズラーっと項目が流れて行くと思います。

出力を停止するにはCtrl+Cを押します。

このようにリアルタイムにサーバのリソースを把握することができます。


dstatのオプションの詳細と利用方法

dstatには様々なモニタリング用のオプションが用意されています。
ただ数字を眺めるだけでは意味が無いので、注目するべき項目と利用方法についても合わせて記載しました。

オプション 機能 項目 意味 利用法
-c, --cpu CPU時間の割合を表示する usr(user) ユーザ空間で使われたCPU時間の割合 大きい場合は単純にCPUがボトルネック
sys(system) カーネル空間で使われたCPU時間の割合
idl(idle) アイドル状態のCPU時間の割合 大きい場合はCPUは使われていない
wai(wait) 応答の待ち状態にあったCPU時間の割合 大きい場合はI/Oかネットワークがボトルネック
hiq(irq : servicing interrupts) ハードウェア割り込み処理に使われたCPU時間の割合 大きい場合はカーネルの調整やハードウエア構成の見直しが必要
siq(softirq : servicing softirqs) ソフトウェア割り込み処理に使われたCPU時間の割合 大きい場合はソフトウェアの不具合の可能性
-C 0,3 CPU0とCPU2の状態と合計を表示 -cと同じ -cと同じ
-d, --disk ディスクの状態を表示する read ディスクの読み込みバイト数 ディスクの限界に近づくとボトルネックになる(サーバの構成・役割によって正常値は大きく異る)
writ ディスクの書き込みバイト数 ディスクの限界に近づくとボトルネックになる(サーバの構成・役割によって正常値は大きく異る)
-D total,had 全体表示にディスクの状態も表示
-g ページの入出力数を表示 in(page in) ディスクからメモリに読み込んだバイト数。swap-in 頻繁に書き込まれるようならメモリ不足か実行プロセスが多すぎる
out(page out) メモリ不足時にディスクに書き出したバイト数。swap-out 頻繁に書き込まれるようならメモリ不足か実行プロセスが多すぎる
-i, --int 割り込みの状態を表示 (interrupts) 実行待ちのプロセス数の表示 多い場合は「-c」オプションでハードウエアとソフトウェアどちらに由来するか調べる
-I 5,eth2 int5 と eht2 によって使われている割り込みを含める
-l, --load ロードアベレージの状態を表示 1m, 5m, 15m(load-avg) 時間あたりのCPU利用率の表示。1CPUで1分間、CPUを100%利用した場合は1。2CPUを100%利用した場合は2。0.1なら10%。1mは1分の平均。 大きい場合はCPUがボトルネック
-m, --mem メモリの状態を表示 used 総メモリの使用量 実メモリから利用率を調べることができる
buff バッファキャッシュのメモリ量(ブロックデバイス用キャッシュ) 極端に少ないようならメモリ不足の可能性
cash ページキャッシュからバッファキャッシュを除いたメモリ量 極端に少ないようならメモリ不足の可能性
free 未使用メモリ量 少なかったとしても、空きメモリをCash等に割り振られている場合は問題ない。buffやcashが少なく、本項目も少ない場合はメモリ不足。
-n, --net recv ネットワーク全体の受信データ量 トラフィックと比例しない受信がある場合は攻撃を受けている場合がある
send ネットワーク全体の送信データ量 トラフィックと比例しない送信がある場合はウイルス感染や踏み台にされている可能性がある
-N eth1,total eth1 と合計を含める
-p, --proc プロセスの状態を表示 run 実行中プロセス数
blk カーネル要求後のブロック中プロセス数
new 新しく実行されたプロセス数
-s, --swap スワップの状態を表示 used 利用されているスワップのバイト数 極端に多い場合はメモリ不足。利用率の低いデータを効果的に割り振っただけの場合もあるのでサイズで一概に判断できない。
free 利用されていないスワップのバイト数 数MBなど極端に少ない場合はメモリ不足
-t, --time 日時の表示 data/time
-y, --sys システムの状態を表示 int(int Count) 割り込み回数
csw(Context Switch) コンテキストスイッチの回数
--ipc IPC(Inter-Process Communication、プロセス間通信)の状態を表示 msg(message queue) メッセージキュー
sem(semaphore) セマフォ
shm(shared memory) 共有メモリセグメント
--lock (ファイル)ロックの状態表示 pos(posix) POSIX ロック数
lck(flock) flock()でのロック数
rea(read) 読み込みロック数 あまりに多い場合は性能低下を引き起こす。ソフトごとにサーバを分ける必要あり
wri(write) 書き込みロック数 あまりに多い場合は性能低下を引き起こす。ソフトごとにサーバを分ける必要あり
--raw raw デバイスの利用数を表示 実質利用されていない
--tcp TCP通信のバイト数を表示 lis(listen) 待ちうけ状態の数 サービスを提供していない不要なポートが開いてないか確認
act(established) ACTIVE状態の数 トラフィックの把握
syn(syn) SYN状態の数 多い場合はSYN flood攻撃を受けている可能性あり。tcp_syncookiesの確認
tim(time_wait) TIME_WAIT状態の数 多い場合正常に接続を終了できていない可能性あり。Iptablesのstateの確認。単純に高負荷でメモリリークする場合は/etc/sysctl.confのtcp_fin_timeoutの調整。もしくはWebサーバのコネクション数調整
clo(close) CLOSE状態の数
--udp TCP通信のバイト数を表示 lis(listen) 待ちうけ状態の数
act(established) ACTIVE状態の数 異常に多い場合はDNS Amp攻撃やPing flood攻撃等を確認。攻撃の場合はIptableの設定を見直す。
--unix UNIXドメインソケットの状態を表示 dgm(datagram)
str(stream)
lis(listen)
act(active)
-M stat1,stat2 dstatやプラグインの統計情報を表示。利用可能なプラグインは「dstat -M list」で確認できる。
-a, --all -cdngy と同じ(デフォルト)
-f, --full -D, -I と -N のリストを拡張 システム全体と、CPU等の詳細な把握
-v, --vmstat -pmgdsc -D total と同じ vmstatコマンドと同じ項目
--integer 整数の数値を表示
--nocolor カラー表示しない
--noupdate delay が 1 を超えるとき、仲介更新を無効
--output file 出力結果を CSV ファイルに書き出す

外部プラグインの利用方法

dstatには各種プラグインが用意されています。
以下のコマンドで何がインストールされているか把握します。

# cd /usr/share/dstat
# ls *.py
dstat_battery.py         dstat_mysql5_keys.py  dstat_top_bio.py
dstat_battery_remain.py  dstat_mysql_io.py     dstat_top_cpu.py
dstat_cpufreq.py         dstat_mysql_keys.py   dstat_top_cputime_avg.py
dstat_dbus.py            dstat_net_packets.py  dstat_top_cputime.py
dstat_disk_util.py       dstat_nfs3_ops.py     dstat_top_io.py
dstat_fan.py             dstat_nfs3.py         dstat_top_latency_avg.py
dstat_freespace.py       dstat_nfsd3_ops.py    dstat_top_latency.py
dstat_gpfs_ops.py        dstat_nfsd3.py        dstat_top_mem.py
dstat_gpfs.py            dstat_ntp.py          dstat_top_oom.py
dstat_helloworld.py      dstat_postfix.py      dstat_utmp.py
dstat_innodb_buffer.py   dstat_power.py        dstat_vmk_hba.py
dstat_innodb_io.py       dstat_proc_count.py   dstat_vmk_int.py
dstat_innodb_ops.py      dstat.py              dstat_vmk_nic.py
dstat_lustre.py          dstat_rpcd.py         dstat_vm_memctl.py
dstat_memcache_hits.py   dstat_rpc.py          dstat_vz_cpu.py
dstat_mysql5_cmds.py     dstat_sendmail.py     dstat_vz_io.py
dstat_mysql5_conn.py     dstat_snooze.py       dstat_vz_ubc.py
dstat_mysql5_io.py       dstat_thermal.py      dstat_wifi.py

続いて利用方法。今回はout-of-memoryを把握することのできる「dstat_top_oom.py」を利用します。

オプションで指定するには接頭辞の「dstat_」を取って、「_(アンダーバー)」を「-(ハイフン)」に変えて指定します。

# dstat --top-oom

よく使う項目をショートカット登録

それぞれのオプションを詳細に把握するのは大変なので、よく使う項目をショートカットに登録します。
以下のようにコマンドを打てば、エイリアスに登録できます。

# alias dstat-full='dstat -Tclmdrn'
# alias dstat-mem='dstat -Tclm'
# alias dstat-cpu='dstat -Tclr'
# alias dstat-net='dstat -Tclnd'
# alias dstat-disk='dstat -Tcldr'

利用方法は簡単「dstat-full」とコマンドを打つだけです。

# dstat-full

以上でdstatの解説は終了です。
どの項目が何を表しているのかを理解し、サーバの提供するサービスを把握すれば、注目するべき項目が解ります。
そうは言っても慣れないうちは数字だけでは把握しにくいものです。

そんな方のために、データをグラフ化してくれる「手軽にデータをグラフ化するGrowthForecastのインストールと使い方」について解説します。