原文网址:Linux命令--统计多项--dstat--使用/教程/实例_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍Linux的统计类命令:dstat。
dstat 是一个多功能产品,可以替换:vmstat + iostat + netstat + ifstat。dstat扬长避短,即克服了这些命令的局限又增加了一些额外的功能,不但拥有更多的监控项,也更灵活。dstat在性能测试、基准测试和排除故障过程中可以很方便监控系统运行状况。
特性
- 结合了vmstat,iostat,ifstat,netstat以及更多的信息
- 实时显示统计情况,输出报告
- 在分析和排障时可以通过启用监控项并排序
- 模块化设计
- 使用python编写的,方便扩展现有的工作任务
- 容易扩展和添加你的计数器
- 包含的许多扩展插件——增加新的监控项目很方便
- 可以分组统计块设备/网络设备,并给出总数
- 可以显示每台设备的当前状态
- 极准确的时间精度,即便是系统负荷较高也不会延迟显示
- 显示准确地单位和和限制转换误差范围
- 不同的计量单位用不同的颜色显示
- 显示中间结果延时小于1秒
- 支持输出CSV格式报表,并能导入到Gnumeric和Excel以生成图形
格式
dstat [-afv] [options..] [delay [count]]
delay 两次输出之间的时间间隔,默认是1s
count 报告输出的次数,默认是没有限制,一直输出直到取消
dstat命令有默认选项,执行dstat命令不加任何参数,它默认会收集-cpu-、-disk-、-net-、-paging-、-system-的数据,一秒钟收集一次。 默认输入 dstat 等于输入了dstat -cdngy 1或dstat -a 1。
选项
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文件中 |
命令插件
常用插件
插件名称 | 插件描述 |
---|---|
- -disk-util | 显示某一时间磁盘的忙碌状况 |
- -freespace | 显示当前磁盘空间使用率 |
- -proc-count | 显示正在运行的程序数量 |
- -top-bio | 显示块I/O最大的进程 |
- -top-cpu | 显示CPU占用最大的进程 |
- -top-io | 显示正常I/O最大的进程 |
- -top-mem | 显示占用最多内存的进程 |
所有插件
插件名称 | 插件描述 |
---|---|
- -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 | 无线连接质量和信号噪声比 |
结果含义
dstat
[root@xiaoagiao ~]# dstat
You did not select any stats, using -cdngy by default.
----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| 21k 13k| 0 0 | 0 0 | 37 90
0 0 100 0 0 0| 0 0 | 60B 242B| 0 0 | 32 70
1 0 99 0 0 0| 0 0 | 60B 114B| 0 0 | 34 66
0 0 100 0 0 0| 0 0 | 60B 106B| 0 0 | 25 56
0 0 100 0 0 0| 0 0 | 60B 98B| 0 0 | 38 69
0 1 99 0 0 0| 0 0 | 60B 98B| 0 0 | 30 62
0 0 100 0 0 0| 0 0 | 60B 98B| 0 0 | 32 60
0 0 100 0 0 0| 0 0 | 60B 98B| 0 0 | 26 57
0 0 100 0 0 0| 0 0 | 60B 98B| 0 0 | 36 67
0 0 100 0 0 0| 0 0 | 60B 98B| 0 0 | 25 58
0 0 100 0 0 0| 0 0 | 60B 90B| 0 0 | 35 65
0 1 99 0 0 0| 0 2048B| 120B 98B| 0 0 | 49 239
0 0 100 0 0 0| 0 0 | 300B 264B| 0 0 | 42 70
0 0 100 0 0 0| 0 0 | 210B 158B| 0 0 | 36 71
0 1 99 0 0 0| 0 0 | 120B 98B| 0 0 | 36 70
0 0 100 0 0 0| 0 0 | 120B 98B| 0 0 | 26 57 ^C
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处在空闲状态时间百分比
示例大全
例1:查看当前占用I/O、cpu、内存等最高的进程信息
[root@xiaoagiao ~]# dstat --top-mem --top-cpu --top-io
--most-expensive- -most-expensive- ----most-expensive----
memory process | cpu process | i/o process
firewalld 28.0M|vmtoolsd 0.1|systemd 48k 33k
firewalld 28.0M| |sshd: root@ 388B 164B
firewalld 28.0M|vmtoolsd 1.0|vmtoolsd 7517B 0
firewalld 28.0M| |sshd: root@ 155B 52B
firewalld 28.0M|python2 1.0|sshd: root@ 155B 44B
firewalld 28.0M| |vmtoolsd 9448B 0
firewalld 28.0M| |sshd: root@ 148B 44B
firewalld 28.0M| |sshd: root@ 155B 36B
firewalld 28.0M| |sshd: root@ 155B 36B