dstat 监控工具

一、什么是dstat

通过man帮助,可以看到官方对dstat的定义为:多功能系统资源统计生成工具( versatile tool for generating system resource statistics)。在获取的信息上有点类似于top、free、iostat、vmstat等多个工具的合集,官方解释为vmstat、iostat、ifstat等工具的多功能替代品,且添加了许多额外的功能(Dstat is a versatile replacement for vmstat, iostat and ifstat. Dstat overcomes some of the limitations and adds some extra features.);其结果可以保持到csv文件,使用脚本或第三方工具对性能进行分析利用(如通过监控平台监控,也可以保持到数据库)。在Centos 6.x系统上安装基本服务器即默认安装,而在其他操作系统可能需要手动安装。

二、安装方法

Ubuntu和Debian系统:

本地软件库中有相关安装包,你可以用下面命令安装:

# sudo apt-get install dstat

RHEL/Centos和Fedora系统:

使用如下命令很简单就能进行安装:

# yum install  -y dstat

三、特性

结合了vmstat,iostat,ifstat,netstat以及更多的信息
实时显示统计情况,输出报告
在分析和排障时可以通过启用监控项并排序
模块化设计
使用python编写的,方便扩展现有的工作任务
容易扩展和添加你的计数器
包含的许多扩展插件——增加新的监控项目很方便
可以分组统计块设备/网络设备,并给出总数
可以显示每台设备的当前状态
极准确的时间精度,即便是系统负荷较高也不会延迟显示
显示准确地单位和和限制转换误差范围
不同的计量单位用不同的颜色显示
显示中间结果延时小于1秒
支持输出CSV格式报表,并能导入到Gnumeric和Excel以生成图形

三、使用方法

[[email protected] ~]# dstat
—-total-cpu-usage—- -dsk/total-   -net/total-     —paging– —system–
usr sys  idl  wai hiq siq   |     read  writ    |  recv send     |   in out        | int  csw
0     0   99   0    0    0   |     47B    13k    |   0      0        |   0    0        | 179  125
1      0   99  0    0     0   |     0       0       |  1913B 3019B |   0    0        | 269 111
0     0   100 0    0    0    |     0       0       |  246B 226B   |   0    0        | 39   39

针对默认输出字段解释如下

分组       分组含义及子项字段含义
CPU状态: CPU的使用率。显示了用户占比,系统占比、空闲占比、等待占比、硬中断和软中断情况。
磁盘统计: 磁盘的读写,分别显示磁盘的读、写总数。
网络统计: 网络设备发送和接受的数据,分别显示的网络收、发数据总数。
分页统计: 系统的分页活动。分别显示换入(in)和换出(out)。
系统统计: 统计中断(int)和上下文切换(csw)。

监测界面各参数含义

Procs

  • r:运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
  • b:处于不可中断状态的进程数,常见的情况是由IO引起的
Memory
  • swpd: 切换到交换内存上的内存(默认以KB为单位)。如果 swpd 的值不为0,或者还比较大,比如超过100M了,但是 si, so 的值长期为 0,这种情况我们可以不用担心,不会影响系统性能。
  • free: 空闲的物理内存
  • buff: 作为buffer cache的内存,对块设备的读写进行缓冲
  • cache: 作为page cache的内存, 文件系统的cache。如果 cache 的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi 会非常小。
Swap
  • si: 交换内存使用,由磁盘调入内存
  • so: 交换内存使用,由内存调入磁盘

内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。

我发现有些朋友看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
磁盘IO
  • bi: 从块设备读入的数据总量(读磁盘) (KB/s)
  • bo: 写入到块设备的数据总理(写磁盘) (KB/s)
注:随机磁盘读写的时候,这2个 值越大(如超出1M),能看到CPU在IO等待的值也会越大
System
  • in: 每秒产生的中断次数
  • cs: 每秒产生的上下文切换次数
上面这2个值越大,会看到由内核消耗的CPU时间会越多
Cpu
  • usr: 用户进程消耗的CPU时间百分比

us 的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了(比如 PHP/Perl)

  • sys: 内核进程消耗的CPU时间百分比

sys 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。

  • wai: IO等待消耗的CPU时间百分比

wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。

  • idl: CPU处在空闲状态时间百分比

 

命令格式

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 2 5 每2秒输出一次cpu负载,总共输出5次
-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 显示占用最多内存的进程

原创文章,作者:赛福,如若转载,请注明出处:https://www.safecdn.cn/linux/2018/11/dstat-monitor.html

发表评论

邮箱地址不会被公开。