使用dstat命令实时监视服务器资源
dstat – 多功能工具,可生成系统资源统计信息。
背景
我在使用mpstat、vmstat等監控工具進行資源監控時,終端機的數量不斷增加,讓我感到厭煩。後來我查了一下,聽說有一個叫做dstat的命令可以顯示各種資訊,非常方便,現在就向大家介紹一下。
dstat是什么?
dstat是一个命令,简单来说,它可以按核心显示每个CPU的负载,按磁盘显示每个IO的负载,按接口显示网络传输量。使用dstat命令可以监视使用top、iostat和netstat这些命令来监控的资源。
在GitHub上,这个项目的源代码已经公开了。使用的语言是Python。dagwieers/dstat
官方网站
http://dag.wiee.rs/home-made/dstat/
安装
$ sudo apt install -y dstat
$ sudo yum istall -y dstat
# GitHubからも取ってこれます(Pythonの必要なパッケージは自前で用意する必要あり)。
$ git clone https://github.com/dagwieers/dstat.git
$ cd dstat/
$ ./dstat
# バージョン確認
$ dstat -V
Dstat 0.7.3
Written by Dag Wieers <dag@wieers.com>
Homepage at http://dag.wieers.com/home-made/dstat/
尝试使用
安装后,只需输入dstat即可像vmstat一样显示资源使用量,无需考虑其他。要停止输出,请按下Ctrl+C。
选项总结
-
- -t … 時間を表示
-c … CPU使用時間の割合を表示
usr … ユーザ空間で使われたCPU使用時間の割合
sys … システム空間で使われたCPU仕様時間の割合
idl … アイドル状態のCPU時間の割合
wai … 応答の待ち状態にあったCPU時間の割合
hiq … ハードウェア割り込み処理に使われたCPU時間の割合
siq … ソフトウェア割り込み処理に使われたCPU時間の割合
-m … メモリの状態を表示
used … 物理メモリ全体での使用容量
buff … バッファキャッシュで使っているメモリ使用容量
cach … ページキャッシュからバッファキャッシュを引いたメモリ使用容量
free … 未使用のメモリ使用容量
–vm … バーチャルメモリの利用状態を表示
majpf … 物理メモリ上に該当データがロードされなかった回数
minpf … 物理メモリに該当データがロードされた回数
alloc … 空きメモリを探して割り当てた回数
free … メモリを解放した回数
-s … スワップの利用状態を表示
used … スワップ全体での使用容量
free … 未使用のスワップ容量
-g … ページの入出力数を表示
in … ディスクからメモリに読み込んだバイト数
out … メモリ不足時にディスクに書き出したバイト数
-d … ディスクの状態を表示
read … ディスクの読み込みバイト数
writ … ディスクの書き込みバイト数
-r … ディスクへの読み書きリクエスト数(IOPS)
read … ディスクの読み込みリクエスト数
writ … ディスクの書き込みリクエスト数
-i … 割り込み処理の状態を表示
interrupts … 実行待ちのプロセス数
-l … ロードアベレージの状態を表示
1m … 1分平均でのCPU時間の利用割合
5m … 5分平均でのCPU時間の利用割合
15m … 15分平均でのCPU時間の利用割合
-p … プロセスの状態を表示
run … 実行中プロセス数
blk … ブロック中のプロセス数
new … 新しく実行されたプロセス数
-y … システム状態を表示
int … 割り込み回数
csw … コンテキストスイッチの回数
–lock … ファイルロックの状態を表示
pos … posixロック数
lck … flockロック数
rea … 読み込みロック数
wri … 書き込みロック数
-n … ネットワーク状態を表示
recv … ネットワーク全体の受信データ量
send … ネットワーク全体の送信データ量
–ipc … プロセス間通信の状態を表示
msg … メッセージキュー
sem … セマフォ
shm … 共有メモリセグメント
–unix … UNIXドメインソケットの状態を表示
dgm … Datagram通信の件数
str … Stream通信の件数
lis … listenな通信の件数
act … activeな通信の件数
–tcp … TCP通信のバイト数を表示
lis … 待ちうけ状態の数
act … ACTIVE状態の数
syn … SYN状態の数
tim … TIME_WAIT状態の数
clo … CLOSE状態の数
–udp … UDP通信のバイト数を表示
lis … 待ちうけ状態の数
act … ACTIVE状態の数
–float 小数点も含めて表示する
–noheaders ヘッダ表示を一回だけにします
按照您在选项中指定的顺序显示您想要使用的项目。以下是使用示例。
网络和硬盘状态各不相同。
$ dstat -Tclmdrn
--epoch--- --total-cpu-usage-- ---load-avg--- ------memory-usage----- -dsk/total- --io/total- -net/total-
epoch |usr sys idl wai stl| 1m 5m 15m | used free buff cach| read writ| read writ| recv send
1548760630| 2 3 93 3 0|0.92 1.91 2.14|1613M 71.1M 13.4M 180M|1178k 415k|97.8 46.6 | 0 0
1548760631| 2 7 86 5 0|0.92 1.91 2.14|1613M 69.4M 13.7M 182M|2304k 140k| 313 22.0 | 0 0
1548760632| 5 4 90 1 0|0.92 1.91 2.14|1613M 69.3M 13.7M 182M| 20k 64k|5.00 11.0 |2628B 1490
暂时先处理CPU和内存相关事项
$ dstat -Tclm
--epoch--- --total-cpu-usage-- ---load-avg--- ------memory-usage-----
epoch |usr sys idl wai stl| 1m 5m 15m | used free buff cach
1548760014| 2 3 93 3 0|0.95 2.01 2.11|1618M 61.9M 12.3M 181M
1548760015| 3 13 82 2 0|0.95 2.01 2.11|1616M 81.6M 12.0M 167M
查看每个核心的CPU使用率
$ dstat -c -C 0,1,total
-----cpu0-usage----------cpu1-usage-------total-cpu-usage--
usr sys idl wai stl:usr sys idl wai stl:usr sys idl wai stl
1 3 93 3 0: 2 3 92 3 0: 2 3 93 3 0
10 30 3 56 0: 20 25 0 56 0: 15 27 2 56 0
将执行结果输出到日志文件中
$ dstat --output dstat.csv
插件
安装dstat包后,会将大量的Python脚本复制到”/usr/share/dstat”目录中。这些脚本是dstat的插件。
您也可以自己添加插件到该目录中。
您还可以使用–list选项查看插件。
$ cd /usr/share/dstat
$ ls *.py
dstat.py dstat_gpfs.py dstat_nfs3.py dstat_snmp_net_err.py dstat_top_oom.py
dstat_battery.py dstat_gpfs_ops.py dstat_nfs3_ops.py dstat_snmp_sys.py dstat_utmp.py
dstat_battery_remain.py dstat_helloworld.py dstat_nfsd3.py dstat_snooze.py dstat_vm_cpu.py
dstat_condor_queue.py dstat_innodb_buffer.py dstat_nfsd3_ops.py dstat_squid.py dstat_vm_mem.py
dstat_cpufreq.py dstat_innodb_io.py dstat_nfsd4_ops.py dstat_test.py dstat_vm_mem_adv.py
dstat_dbus.py dstat_innodb_ops.py dstat_nfsstat4.py dstat_thermal.py dstat_vmk_hba.py
dstat_disk_avgqu.py dstat_lustre.py dstat_ntp.py dstat_top_bio.py dstat_vmk_int.py
dstat_disk_avgrq.py dstat_md_status.py dstat_postfix.py dstat_top_bio_adv.py dstat_vmk_nic.py
dstat_disk_svctm.py dstat_memcache_hits.py dstat_power.py dstat_top_childwait.py dstat_vz_cpu.py
dstat_disk_tps.py dstat_mysql5_cmds.py dstat_proc_count.py dstat_top_cpu.py dstat_vz_io.py
dstat_disk_util.py dstat_mysql5_conn.py dstat_qmail.py dstat_top_cpu_adv.py dstat_vz_ubc.py
dstat_disk_wait.py dstat_mysql5_innodb.py dstat_redis.py dstat_top_cputime.py dstat_wifi.py
dstat_dstat.py dstat_mysql5_innodb_basic.py dstat_rpc.py dstat_top_cputime_avg.py dstat_zfs_arc.py
dstat_dstat_cpu.py dstat_mysql5_innodb_extra.py dstat_rpcd.py dstat_top_int.py dstat_zfs_l2arc.py
dstat_dstat_ctxt.py dstat_mysql5_io.py dstat_sendmail.py dstat_top_io.py dstat_zfs_zil.py
dstat_dstat_mem.py dstat_mysql5_keys.py dstat_snmp_cpu.py dstat_top_io_adv.py
dstat_fan.py dstat_mysql_io.py dstat_snmp_load.py dstat_top_latency.py
dstat_freespace.py dstat_mysql_keys.py dstat_snmp_mem.py dstat_top_latency_avg.py
dstat_fuse.py dstat_net_packets.py dstat_snmp_net.py dstat_top_mem.py
dstat --list
internal:
aio, cpu, cpu-adv, cpu-use, cpu24, disk, disk24, disk24-old, epoch, fs, int, int24, io, ipc, load, lock, mem, mem-adv, net, page, page24,
proc, raw, socket, swap, swap-old, sys, tcp, time, udp, unix, vm, vm-adv, zones
/usr/share/dstat:
battery, battery-remain, condor-queue, cpufreq, dbus, disk-avgqu, disk-avgrq, disk-svctm, disk-tps, disk-util, disk-wait, dstat,
dstat-cpu, dstat-ctxt, dstat-mem, fan, freespace, fuse, gpfs, gpfs-ops, helloworld, innodb-buffer, innodb-io, innodb-ops, lustre,
md-status, memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-conn, mysql5-innodb, mysql5-innodb-basic, mysql5-innodb-extra,
mysql5-io, mysql5-keys, net-packets, nfs3, nfs3-ops, nfsd3, nfsd3-ops, nfsd4-ops, nfsstat4, ntp, postfix, power, proc-count, qmail,
redis, rpc, rpcd, sendmail, snmp-cpu, snmp-load, snmp-mem, snmp-net, snmp-net-err, snmp-sys, 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-cpu, vm-mem, vm-mem-adv, vmk-hba, vmk-int, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi, zfs-arc,
zfs-l2arc, zfs-zil
以下是插件的使用示例。
输出有可能成为OOM-Killer的进程
dstat --top-oom
--out-of-memory---
kill score
rancher 133
确定CPU使用率最高的进程
$ dstat -ta --top-cpu
----system---- --total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system-- -most-expensive-
time |usr sys idl wai stl| read writ| recv send| in out | int csw | cpu process
29-01 11:34:36| 2 3 93 3 0|1195k 421k| 0 0 | 369k 335k|1417 4216 |rancher 1.3
29-01 11:34:37| 12 9 71 8 0|1992k 11M| 898B 229B| 300k 10M|5285 12k|rancher 4.0^
总结
我认为dstat的优点在于它可以通过一个命令获取多样的信息。
我认为将其输出到CSV文件并进行可视化也是一个不错的选择。
编写插件可能也有助于学习。
请参考链接
https://nsmr.tk/dstat.html 可能提供长期可维护和高度展示的统计数据,用于监控系统性能。
http://hirose31.hatenablog.jp/entry/20120229/1330501968 这篇博文介绍了一种用于统计和监测系统性能的工具。
https://qiita.com/harukasan/items/b18e484662943d834901 这篇文章中提到了一种工具,可以用来统计和监测系统的性能。