使用dstat命令实时监视服务器资源

timthumb.png

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。

スクリーンショット 2019-01-29 19.13.21.png

选项总结

    • -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 这篇文章中提到了一种工具,可以用来统计和监测系统的性能。

广告
将在 10 秒后关闭
bannerAds