リソース監視なら、stat系の王様「dstat」を利用しよう
「あれ?サーバが重いかも?」
そんなときは「とりあえずtopコマンド」という方も多いと思います。次はvmstatで、それでもわからなければnetstatを…。といくつもコマンドを打つのも億劫です。
そんなときには1つのコマンドでサーバ全体のリソースを監視することのできるdstatがお勧めです
せっかくなので今流行りのログ収集とグラフ化を行うGrowthForecastやFluentdについても合わせて解説します。
長くなりそうなので全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のインストールと使い方」について解説します。
ピンバック: サーバーリソース分析の勘所(ディスクI/O編) | thiroyoshi.blog