概述
先献上【官网】和【github】本文中所有资料的均源于此,写的不清楚的地方可以翻阅一下官方文档
dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。dstat扬长避短,即克服了这些命令的局限又增加了一些额外的功能,不但拥有更多的监控项,也更灵活。dstat在性能测试、基准测试和排除故障过程中可以很方便监控系统运行状况。
dstat可以查看所有的实时系统资源,如:通过统计IDE控制器当前状态来比较磁盘利用率,或者直接通过网络带宽数值来比较磁盘的吞吐率(在相同的时间间隔内)。
dstat以列表的形式提供选项信息,并清晰地告知以何种幅度和单位显示输出。输出信息整洁,降低发生错误的概率。最重要的是,整洁的数据更容易编写插件用来收集分析关注的数据信息。
dstat默认输出是专门为实时查看而设计的,然而也可以将详细信息通过cvs输出到一个文件,然后将cvs文件导入到Gnumeric或者Excel中生成图表。
特性
- 结合了vmstat,iostat,ifstat,netstat以及更多的信息
- 实时显示统计情况,输出报告
- 在分析和排障时可以通过启用监控项并排序
- 模块化设计
- 使用python编写的,方便扩展现有的工作任务
- 容易扩展和添加你的计数器
- 包含的许多扩展插件——增加新的监控项目很方便
- 可以分组统计块设备/网络设备,并给出总数
- 可以显示每台设备的当前状态
- 极准确的时间精度,即便是系统负荷较高也不会延迟显示
- 显示准确地单位和和限制转换误差范围
- 不同的计量单位用不同的颜色显示
- 显示中间结果延时小于1秒
- 支持输出CSV格式报表,并能导入到Gnumeric和Excel以生成图形
启程
安装
只演示CentOS下的安装(我的实验环境为CentOS)
[root@wmstianjin16172 ~]# yum install dstat
测试命令
安装完成测试一下命令是否完成安装
[root@wmstianjin16172 ~]# dstat
针对默认输出字段解释如下
分组 | 分组含义及子项字段含义 |
---|---|
CPU状态 | CPU的使用率。显示了用户占比,系统占比、空闲占比、等待占比、硬中断和软中断情况。 |
磁盘统计 | 磁盘的读写,分别显示磁盘的读、写总数。 |
网络统计 | 网络设备发送和接受的数据,分别显示的网络收、发数据总数。 |
分页统计 | 系统的分页活动。分别显示换入(in)和换出(out)。 |
系统统计 | 统计中断(int)和上下文切换(csw)。 |
命令格式
dstat [-afv] [options..] [delay [count]]
命令选项
Options | Details |
---|---|
-c, - -cpu | 开启cpu统计 |
-C | 该选项跟cpu的编号(0~cpu核数-1,多个用都好隔开)如:0,3,total表示分别包含cpu0、cpu3和total |
-d, - -disk | 开启disk统计 |
-D | 改选跟具体的设备名(多个用逗号隔开)如:total,hda,hdb表示分别统计total、hda、hdb设备块 |
-g, - -page | 开启分页统计 |
-i, - -int | 开启中断统计 |
-I 5,10 | 没弄懂呢~巴拉巴拉 |
-l, - -load | 开启负载均衡统计,分别是1m,5m,15m |
-m, - -mem | 开启内存统计,包括used,buffers,cache,free |
-n, - -net | 开启net统计,包括接受和发送 |
-N | 该选项可以跟网络设备名多个用逗号隔开,如eth1,total |
-p, - -proc | 开启进程统计,包括runnable, uninterruptible, new |
-r, - -io | io开启请求统计,包括read requests, write requests |
-s, - -swap | 开启swap统计,包括used, free |
-S | 该选项可以跟具体的交换区,多个用逗号隔开如swap1,total |
-t, - -time | 启用时间和日期输出 |
-T, - -epoch | 启用时间计数,从epoch到现在的秒数 |
-y, - -sys | 开启系统统计,包括中断和上下文切换 |
- -aio | 开启同步IO统计 (asynchronous I/O) |
- -fs | 开启文件系统统计,包括 (open files, inodes) |
- -ipc | 开启ipc统计,包括 (message queue, semaphores, shared memory) |
- -lock | 开启文件所统计,包括 (posix, flock, read, write) |
- -raw | 开启raw统计 (raw sockets) |
- -socket | 开启sockets统计,包括 (total, tcp, udp, raw, ip-fragments) |
- -tcp | 开启tcp统计,包括(listen, established, syn, time_wait, close) |
- -udp | 开启udp统计 (listen, active) |
- -unix | 开启unix统计(datagram, stream, listen, active) |
- -vm | 开启vm统计 (hard pagefaults, soft pagefaults, allocated, free) |
- -stat | 通过插件名称开启插件扩展,详见命令插件 :可能的内置插件为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 |
- -list | 列举内置插件扩展的名称 |
-a, - -all | 是默认值相当于 -cdngy (default) |
-f, - -full | 相当于 -C, -D, -I, -N and -S |
-v, - -vmstat | 相当于 -pmgdsc -D total |
- -bw, - -blackonwhite | 在白色背景终端上改变显示颜色 |
- -float | 在屏幕上的输出强制显示为浮点值(即带小数)(相反的选项设置为 - -integer) |
- -integer | 在屏幕上的输出强制显示为整数值,此为默认值(相反的选项设置为- -float) |
- -nocolor | 禁用颜色(意味着选项 - -noupdate) |
- -noheaders | 禁止重复输出header,默认会打印一屏幕输出一次header |
- -noupdate | 当delay>1时禁止在过程中更新(即在时间间隔内不允许更新) |
- -output file | 输出结果到cvs文件中 |
命令参数
参数名称 | 参数描述 |
---|---|
delay | 两次输出之间的时间间隔,默认是1s |
count | 报告输出的次数,默认是没有限制,一直输出知道ctrl+c |
命令插件
虽然anyone可以自由的为dstat编写插件,但dstat附带大量的插件已经大大扩展其功能,下面是dstat附带插件的一个概述:
插件名称 | 插件描述 |
---|---|
- -battery | 电池电池百分比(需要ACPI) |
- -battery-remain | 电池剩余小时、分钟(需要ACPI) |
- -cpufreq | CPU频率百分比(需要ACPI) |
- -dbus | dbus连接的数量(需要python-dbus) |
- -disk-util | 显示某一时间磁盘的忙碌状况 |
- -fan | 风扇转速(需要ACPI) |
- -freespace | 每个文件系统的磁盘使用情况 |
- -gpfs | gpfs读/写 I / O(需要mmpmon) |
- -gpfs-ops | GPFS文件系统操作(需要mmpmon) |
- -helloworld | dstat插件Hello world示例 |
- -innodb-buffer | 显示innodb缓冲区统计 |
- -innodb-io | 显示innodb I / O统计数据 |
- -innodb-ops | 显示innodb操作计数器 |
- -lustre | 显示lustreI / O吞吐量 |
- -memcache-hits | 显示memcache 的命中和未命中的数量 |
- -mysql5-cmds | 显示MySQL5命令统计 |
- -mysql5-conn | 显示MySQL5连接统计 |
- -mysql5-io | MySQL5 I / O统计数据 |
- -mysql5-keys | 显示MySQL5关键字统计 |
- -mysql-io | 显示MySQL I / O统计数据 |
- -mysql-keys | 显示MySQL关键字统计 |
- -net-packets | 显示接收和发送的数据包的数量 |
- -nfs3 | 显示NFS v3客户端操作 |
- -nfs3-ops | 显示扩展NFS v3客户端操作 |
- -nfsd3 | 显示NFS v3服务器操作 |
- -nfsd3-ops | 显示扩展NFS v3服务器操作 |
- -ntp | 显示NTP服务器的ntp时间 |
- -postfix | 显示后缀队列大小(需要后缀) |
- -power | 显示电源使用量 |
- -proc-count | 显示处理器的总数 |
- -rpc | 显示rpc客户端调用统计 |
- -rpcd | 显示RPC服务器调用统计 |
- -sendmail | 显示sendmail队列大小(需要sendmail) |
- -snooze | 显示每秒运算次数 |
- -test | 显示插件输出 |
- -thermal | 热系统的温度传感器 |
- -top-bio | 显示消耗块I/O最大的进程 |
- -top-cpu | 显示消耗CPU最大的进程 |
- -top-cputime | 显示使用CPU时间最大的进程(单位ms) |
- -top-cputime-avg | 显示使用CPU时间平均最大的进程(单位ms) |
- -top-io | 显示消耗I/O最大进程 |
- -top-latency | 显示总延迟最大的进程(单位ms) |
- -top-latency-avg | 显示平均延时最大的进程(单位ms) |
- -top-mem | 显示使用内存最大的进程 |
- -top-oom | 显示第一个被OOM结束的进程 |
- -utmp | 显示utmp连接的数量(需要python-utmp) |
- -vmk-hba | 显示VMware ESX内核vmhba统计数 |
- -vmk-int | 显示VMware ESX内核中断数据 |
- -vmk-nic | 显示VMware ESX内核端口统计 |
- -vz-io | 显示每个OpenVZ请求CPU使用率 |
- -vz-ubc | 显示OpenVZ用户统计 |
- -wifi | 无线连接质量和信号噪声比 |
常用插件
插件名称 | 插件描述 |
---|---|
- -disk-util | 显示某一时间磁盘的忙碌状况 |
- -freespace | 显示当前磁盘空间使用率 |
- -proc-count | 显示正在运行的程序数量 |
- -top-bio | 显示块I/O最大的进程 |
- -top-cpu | 显示CPU占用最大的进程 |
- -top-io | 显示正常I/O最大的进程 |
- -top-mem | 显示占用最多内存的进程 |
举一些例子:
内存资源使用情况:
dstat -glms --top-mem
CPU资源使用情况:
dstat -cyl --proc-count --top-cpu
输出一个csv文件:
dstat --output ~/test.csv
常见问题
1、cpu分组中”wait”,如果一直处于高使用率,那说明系统存在一些其它问题。当CPU的状态处在”waits”时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。
2、CPU的使用情况是否正常:用户态和内核态的使用是否合理;总体占比是否合理;若不合理可以用dstat对应的插件(- -top-cpu)排查最耗CPU的进程,配合mpstat、top再去下钻一下分析线程,进一步到程序(比如java可以jstack)。
3、磁盘IO读写是否正常:读写是否偏大;若不正常可以配合插件- -disk-util、- -freespace、- -top-bio、- -top-io等进行排查,也可以配合iostat排查
3、内存是否正常:一般要配合交换区内存一起判断,若不正常可以配合插件- -top-mem,可能是开启的进程太多,或者第三方程序捣乱。
4、应用程序内存是否正常:配合业务表现比如请求响应慢、没反应等,在结合第三方程序监控(如java可以用jvm监控工具(jprofiler、jconsole、jvisualvm……)监控内存)此种情况和3还不太一样,一个jvm内存一个sys内存
5、分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值都是0。
6、系统统计仅在有比较基线时才有意义。中断和上下文切换较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。
7、使用不同的插件可以快速排查有问题的进程然后配合其他工具下钻具体问题,当然这个需要建立在你对所有的插件都比较熟悉的基础之上,知道什么情况下使用什么插件。技巧:可以将常用的命令写成脚本,执行分析,这样就不用每次都敲了。
原文连接
欢迎拍砖,未完待续……