Linux
Debian
dstat

dstatの便利なオプションまとめ

More than 3 years have passed since last update.

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はとても便利なのでみんな使おう。