dstatは便利なオプションがたくさんあるのでみんなオレオレdstatをつくろう。
最後まで読むのがめんどくさい人向け
なんか重くなってるっぽい
$ sudo dstat -ta --top-cpu
なんかIOが刺さってるっぽいとき
$ sudo dstat -ta --top-io-adv --top-bio-adv
とりあえず全部みたい
$ sudo dstat -af
vmstatが好きだ
$ dstat -v
詳しく知りたい
$ man dstat
よく使うオプション
下に基本的なオプションを並べてみた。複数使うときはdstat -tcdn
みたいな感じで指定する。ロングオプションも使えてdstat --time --cpu --disk
みたいにできるけど長いので使ったことない。
説明 | |
---|---|
-a | よく使うオプション詰め合わせ-cdngy と等価でオプションをつけないと勝手にこれになる。 |
-t | 時間を表示する。 どのタイミングかわからなくなることがあるのでいつもつけている。 |
-T | epoch timeを表示する epoch timeで出ているログと併せてみたいときとかに便利。 |
-c | CPU使用率を表示する 基本。 |
-d | Disk IOを表示する 基本。 |
-g | ページIN/OUTを表示する -sと併せてつかったりする。 |
-i | 割り込みを表示する あまり使ったことないけど、特定番号の割り込みを監視したいときには便利かな。 |
-l | ロードアベレージを表示する ロードの数値だけで負荷を評価することがあまりないので使わない。 |
-m | メモリの使用量を表示する すごい勢いでfreeが減っていくときにとか。 |
-n | ネットワークIOを表示する 基本。単位はB/s。 |
-p | プロセス数を表示する forkしてプロセスが増減するときに監視するときとかに使えるかも。 |
-s | スワップのused/freeを表示する swapが特定タイミングで増えてしまうときとかに使う。 |
-y | 割り込み回数とコンテキストスイッチの回数を表示する あまり使ったことない…… |
CPUコア、ディスク、ネットワークインターフェース毎に見る
最近のWebサーバーだと、(仮想化マシンだと普通だけど)シングルコアCPUは逆に珍しいし、ディスクもHDDとSSDが載ってたり、eth0とeth1があったり、コアそれぞれのstatとかインターフェースごとのstatをみたいことは割とよくある。
そういうときには、-C
、-D
、-I
、-N
といったオプションを使う。それぞれ-c
、-d
、-i
、-n
オプションに対応していて、カンマ区切りで指定する。また合計値はtotal
を使って見られる。
例えば、4コアのマシンでCPUコアそれぞれ毎に見たいときは次のようになる。
$ dstat -c -C 0,1,2,3,total # CPUコア0,1,2,3と合計を表示
eth1だけを見たい時とかは次のようになる。
$ dstat -n -N eth1 # eth1のstatだけを表示
インターフェースが複数あるんだよ、全部指定するのめんどくさいよ、って時は-f
オプションが便利。ただしtotal
の値は見られないので、total
を見たい時はめんどくさいけどいっこいっこ指定する必要がある。
$ dstat -af # とりあえず全部みたい
ログをファイルに保存する
dstat中のログを保存するには--output
オプションを使う。すると各値がCSV形式で保存される。
$ dstat --output dstat.csv
保存されるログは次のような書式だ。
$ cat dstat.csv
"Dstat 0.7.2 CSV output"
"Author:","Dag Wieers <dag@wieers.com>",,,,"URL:","http://dag.wieers.com/home-made/dstat/"
"Host:","debian7",,,,"User:","harukasan"
"Cmdline:","dstat --output dstat.csv",,,,"Date:","31 Oct 2013 15:18:21 JST"
"total cpu usage",,,,,,"dsk/total",,"net/total",,"paging",,"system",
"usr","sys","idl","wai","hiq","siq","read","writ","recv","send","in","out","int","csw"
2.291,0.227,97.373,0.004,0.001,0.105,37.173,12668.059,0.0,0.0,0.0,0.0,505.675,275.612
0.500,0.0,99.500,0.0,0.0,0.0,0.0,69632.0,134756.0,71311.0,0.0,0.0,228.0,218.0
1.250,0.250,98.500,0.0,0.0,0.0,0.0,0.0,243280.0,99172.0,0.0,0.0,204.0,156.0
0.750,0.0,98.750,0.0,0.0,0.500,0.0,0.0,793178.0,47389.0,0.0,0.0,365.0,148.0
3.250,0.0,96.500,0.0,0.0,0.250,0.0,0.0,2018204.0,36349.0,0.0,0.0,784.0,300.0
便利なプラグインを活用する
dstatはプラグインを組み込むことができ、標準でもいくつかプラグインが入っている(と思う)。これらを使うと様々な情報をdstatにまとめて表示できる。dstatはPythonで書かれているので、Pythonで簡単にプラグインを書くこともできる。
CPU負荷の原因を探る
ロードがすごく上がってるサーバとかでuserがCPU使いまくってる場合にtopでCPU使ってるプロセスを見たりするが、それをdstatでできるのが--top-cpu
である。このプラグインでは、最もCPUを使ってるプロセス名とその値を表示してくれる。
$ sudo dstat -ta --top-cpu
Apache等同じプロセス名のプロセスが複数ある時はPIDも知りたい。そのようなときは--top-cpu-adv
が便利だ。--top-cpu-adv
はPIDに加えてread、writeの値も表示する。
$ sudo dstat -ta --top-cpu-adv
IOの原因を探る
IOが刺さってるようなサーバで詳しく見たい時には--top-io
、--top-bio
が便利だ。
$ sudo dstat -ta --top-io --top-bio
--top-io
は最もIOが多いプロセスを表示し、--top-bio
は最もブロックIOが多いプロセスを表示する。また、一般ユーザでは他ユーザのプロセスなどを取得できないので、sudo
をつけて実行するとよい。もちろんPIDを知りたい時は--top-cpu-adv
と同じように--top-io-adv
、--top-bio-adv
もある。
$ sudo dstat -ta --top-io-adv --top-bio-adv
どんなプラグインが入っているのか調べる
どのようなプラグインが使えるかしりたい場合は、dstat -V
を使う。Debian7.1では次のようになった。
harukasan@debian7:~$ dstat -V
Dstat 0.7.2
Written by Dag Wieers <dag@wieers.com>
Homepage at http://dag.wieers.com/home-made/dstat/
Platform posix/linux2
Kernel 3.2.0-4-amd64
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2]
Terminal type: screen (color support)
Terminal size: 43 lines, 224 columns
Processors: 4
Pagesize: 4096
Clock ticks per secs: 100
internal:
aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, ipc, load, lock, mem, net, page, page24, proc, raw, socket, swap, swapold, sys, tcp, time, udp, unix, vm
/usr/share/dstat:
battery, battery-remain, cpufreq, dbus, disk-tps, disk-util, dstat, dstat-cpu, dstat-ctxt, dstat-mem, fan, freespace, gpfs, gpfs-ops, helloworld, innodb-buffer, innodb-io, innodb-ops, lustre, memcache-hits,
mysql-io, mysql-keys, mysql5-cmds, mysql5-io, mysql5-keys, net-packets, nfs3, nfs3-ops, nfsd3, nfsd3-ops, ntp, postfix, power, proc-count, qmail, rpc, rpcd, sendmail, snooze, squid, test, thermal, top-bio,
top-bio-adv, top-childwait, top-cpu, top-cpu-adv, top-cputime, top-cputime-avg, top-int, top-io, top-io-adv, top-latency, top-latency-avg, top-mem, top-oom, utmp, vm-memctl, vmk-hba, vmk-int, vmk-nic, vz-cpu,
vz-io, vz-ubc, wifi
このようなかんじで/usr/share/dstat
にあるプラグインが表示された。使ったことないプラグインでも便利そうなやつが結構あるのでいつか試してみたい。
dstatは便利
こんな感じでdstatはとても便利なのでみんな使おう。