dstat命令
dstat是一款开源的综合性系统监控工具,融合了vmstat、iostat、ifstat、netstat等传统工具的核心功能,支持实时聚合展示CPU、内存、磁盘I/O、网络、进程等多维度资源状态。其核心优势在于自定义监控维度、动态调整输出格式、数据可视化展示,且支持单位自动换算与瞬时值统计,避免了传统工具需多命令切换的繁琐,是运维人员实时排查系统性能瓶颈、日常巡检的高效工具,适用于各类Linux发行版。
一、dstat命令基础准备
1.1 安装与验证
dstat多数Linux发行版未预装,需手动安装,安装方式简单,支持主流包管理器:
# CentOS/RHEL系列
yum install -y dstat
# Ubuntu/Debian系列
apt-get install -y dstat
# 源码安装(适用于无包管理器场景)
wget http://dag.wieers.com/rpm/packages/dstat/dstat-0.7.4.tar.gz
tar -zxvf dstat-0.7.4.tar.gz
cd dstat-0.7.4
python setup.py install
# 验证安装
dstat --version # 显示版本信息即安装成功
1.2 基本语法
# 核心语法
dstat [选项参数] [监控模块] [采集间隔秒数] [采集次数]
# 关键说明:
# 1. 无任何参数:默认加载cpu、disk、net、paging、system五大核心模块,每1秒采集一次,无限输出;
# 2. 监控模块:可指定需监控的维度(如cpu、net、io),多个模块用空格分隔,支持自定义组合;
# 3. 采集间隔+次数:间隔为采集时间间隔(秒),次数为采集总次数,无次数时无限采集(需Ctrl+C终止);
# 4. 输出控制:支持将结果保存到文件、调整输出宽度、隐藏重复标题等。
1.3 核心选项参数
dstat选项丰富,分为输出控制、模块扩展、格式调整三类,核心选项如下,覆盖日常监控场景:
# 一、输出控制选项
-o <文件名>:将监控结果保存到CSV文件,便于后续分析或导入表格工具;
-t:在输出中添加时间戳,精准对应每一次采集的时间点;
-l:显示平均负载信息(1分钟、5分钟、15分钟负载值),联动CPU监控;
--nocolor:关闭彩色输出,适用于脚本采集或远程终端无颜色支持场景;
--noheaders:仅显示一次表头,后续采集不重复输出,减少冗余;
--outputfile <文件名>:同-o,兼容旧版本dstat。
# 二、模块扩展选项(核心监控维度)
# 基础模块(默认加载部分)
-c/--cpu:监控CPU使用率(用户态、内核态、空闲、I/O等待等);
-d/--disk:监控磁盘I/O(读写速率);
-n/--net:监控网络收发(速率、包数);
-p/--paging:监控内存页交换(换入、换出速率);
-s/--system:监控系统状态(中断、上下文切换次数)。
# 扩展模块(需手动指定)
-m/--mem:监控物理内存使用(总内存、空闲、已用、缓存、缓冲区);
--io:监控I/O请求细节(读写请求数、合并请求数);
--net-packets:监控网络数据包收发(按包数统计,而非速率);
--proc-count:监控进程总数(运行、睡眠、僵尸进程数);
--top-cpu:显示CPU使用率最高的进程;
--top-mem:显示内存使用率最高的进程;
--top-io:显示I/O使用率最高的进程。
# 三、格式调整选项
-w/--wide:加宽输出格式,避免多模块监控时字段截断;
--unit <单位>:指定数据单位(B/K/M/G),自动换算(如--unit M以MiB显示);
--delay <秒数>:同采集间隔,用于调整默认采集频率。
1.4 模块组合规则
dstat支持灵活组合监控模块,满足不同场景需求,组合规则如下:
- 多个模块用空格分隔,如
dstat cpu mem net 2 5(同时监控CPU、内存、网络,每2秒采集一次,共5次); - 模块可叠加扩展字段,如
dstat -l --top-cpu(默认模块+平均负载+CPU最高进程); - 禁用默认模块需先指定
--noupdate,再自定义模块,如dstat --noupdate mem io 1 3(仅监控内存、I/O)。
二、dstat核心监控场景输出解读
dstat默认输出为彩色格式化表格,不同模块对应不同列,核心场景输出清晰直观,以下针对高频监控场景拆解指标,联动传统工具指标逻辑,确保解读一致性。
2.1 默认监控场景(dstat 2 3)
执行dstat 2 3(默认加载cpu、disk、net、paging、system模块,每2秒采集一次,共3次),输出如下,彩色区分不同模块,便于快速识别:
----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|3.84k 0.00b| 64b 128b| 0b 0b | 35 89
0 0 100 0 0 0|0.00b 0.00b| 32b 64b| 0b 0b | 31 82
0 1 99 0 0 0|0.00b 4.00k| 64b 128b| 0b 0b | 33 85
Average:
0 0 99 0 0 0|1.28k 1.33k| 53b 105b| 0b 0b | 33 85
核心字段解读(按模块分类)
- CPU模块(total-cpu-usage):与top、sar的CPU指标一致
- usr:用户空间CPU使用率;sys:内核空间CPU使用率;idl:空闲率;wai:I/O等待率;
- hiq:高优先级中断占用CPU率;siq:低优先级中断占用CPU率,两者通常为0。
- 磁盘模块(dsk/total):与iostat、sar的磁盘I/O指标对应
- read:磁盘总读取速率;writ:磁盘总写入速率,单位自动适配(B/K/M/G)。
- 网络模块(net/total):与sar -n DEV的收发指标对应
- recv:网络总接收速率;send:网络总发送速率,单位自动适配。
- 页交换模块(paging):与vmstat的si、so指标对应
- in:内存页换入速率(从Swap到内存);out:内存页换出速率(从内存到Swap),数值大于0说明内存压力大。
- 系统模块(system):与vmstat的in、cs指标对应
- int:每秒中断次数;csw:每秒上下文切换次数,数值过高可能消耗大量CPU资源。
2.2 内存+进程监控场景(dstat mem --proc-count --top-mem 2 3)
执行上述命令(监控内存、进程总数、内存最高进程,每2秒采集一次,共3次),输出如下,补充内存细节与进程维度信息:
----memory-usage---- -procs- ----most-expensive----
used free buf cache|run blk new| memory process
784MB 7.02GB 98MB 1.60GB| 1 0 0|java 320MB
784MB 7.02GB 98MB 1.60GB| 1 0 0|java 320MB
784MB 7.02GB 98MB 1.60GB| 1 0 0|java 320MB
Average:
784MB 7.02GB 98MB 1.60GB| 1 0 0|java 320MB
核心字段解读
- 内存模块(memory-usage):与free、sar -r指标一致
- used:已使用内存;free:空闲内存;buf:缓冲区内存;cache:缓存内存,cache可被系统回收复用。
- 进程模块(procs):与vmstat的r、b指标对应
- run:运行队列中的进程数;blk:阻塞状态(等待I/O)的进程数;new:新创建的进程数。
- 最高内存进程(most-expensive):实时显示内存占用最高的进程名称及占用大小,快速定位内存泄漏或资源滥用进程。
2.3 磁盘I/O+网络数据包监控(dstat --io --net-packets -t 2 3)
执行上述命令(监控I/O请求、网络数据包、添加时间戳,每2秒采集一次,共3次),输出如下,聚焦I/O与网络细节:
----io/total---- -net/packets- ----system----
read writ| recv send| time
0 0 | 2 1 |2026-01-28 16:30:00
0 2 | 3 2 |2026-01-28 16:30:02
1 1 | 2 1 |2026-01-28 16:30:04
Average:
0 1 | 2 1 |
核心字段解读
- I/O模块(io/total):与iostat -d的r/s、w/s指标对应
- read:每秒读取请求数;writ:每秒写入请求数,反映I/O请求频率,而非速率。
- 网络数据包模块(net/packets):与sar -n DEV的rxpck/s、txpck/s指标对应
- recv:每秒接收数据包数;send:每秒发送数据包数,适合排查小数据包攻击或频繁小包传输场景。
- 时间戳(time):精准标记每一次采集时间,便于关联历史事件排查问题。
三、dstat命令实战场景示例
3.1 日常全维度巡检(推荐)
dstat -t -l cpu mem disk net system --top-cpu --top-mem 2 10
# 功能:添加时间戳+平均负载,监控CPU、内存、磁盘、网络、系统状态,同时显示CPU/内存最高进程
# 适用场景:日常巡检,快速定位系统整体瓶颈与资源占用最高进程,每2秒采集一次,共10次
3.2 排查内存与页交换问题
dstat mem paging --proc-count 1 15
# 功能:监控内存使用、页交换活动、进程总数,每1秒采集一次,共15次
# 适用场景:内存泄漏、Swap频繁使用排查,若paging的in/out持续大于0,说明内存压力过大
3.3 磁盘I/O与进程联动排查
dstat disk --io --top-io -w 2 8
# 功能:监控磁盘读写速率、I/O请求数,显示I/O最高进程,加宽格式避免截断
# 适用场景:磁盘I/O瓶颈排查,快速定位导致I/O繁忙的具体进程(如数据库、日志写入进程)
3.4 网络异常精准分析
dstat net --net-packets -t --nocolor 1 20 > dstat_net_log.csv
# 功能:监控网络速率、数据包数,添加时间戳,关闭彩色输出,结果保存到CSV文件
# 适用场景:网络异常复盘,CSV文件可导入表格工具分析趋势,或结合脚本提取指标告警
3.5 精简模式监控(脚本自动化采集)
dstat --noupdate --noheaders cpu mem disk 5 0 -o dstat_auto.sv
# 功能:禁用默认模块,仅监控CPU、内存、磁盘,无重复表头,每5秒采集一次,无限采集并保存到文件
# 适用场景:脚本自动化采集,减少输出冗余,便于脚本解析核心指标(如CPU使用率、内存占用)
3.6 高负载场景聚焦监控
dstat -l --top-cpu --top-io 1 30
# 功能:仅显示平均负载、CPU最高进程、I/O最高进程,每1秒采集一次,共30次
# 适用场景:系统高负载时快速定位核心原因,避免多模块干扰,聚焦关键进程
四、关键误区与注意事项
- 误区:默认模块覆盖所有场景 dstat默认模块未包含内存细节、进程总数等扩展信息,排查专项问题(如内存泄漏、I/O进程定位)需手动添加对应模块,避免因信息不全导致误判。
- 单位换算与显示规则 dstat自动适配数据单位(B/K/M/G),但需注意单位是二进制(KiB/MiB)而非十进制(KB/MB),与sar、vmstat保持一致;小流量场景下可能显示为0b,属正常现象,可缩短采集间隔观察瞬时值。
- 彩色输出与脚本采集冲突 脚本自动化采集时,彩色输出会包含控制字符,导致解析错误,需添加
--nocolor选项关闭彩色,同时用--noheaders精简输出。 - 高频率采集的资源消耗 采集间隔过短(如0.5秒)且启用多个扩展模块(如--top-cpu、--top-mem),会消耗一定CPU资源,高负载系统建议将间隔设为1秒以上,避免加重系统负担。
- 模块兼容性问题 部分扩展模块(如--top-io)在低版本dstat(<0.7.0)中不支持,需升级版本(yum update dstat);不同Linux发行版的模块命名可能略有差异,可通过
dstat --list查看支持的模块。 - 无历史数据回放能力 dstat仅支持实时监控与数据保存,无历史数据回放功能,需提前将数据保存到文件(-o选项),后续通过表格工具或脚本分析历史趋势,弥补此短板。
五、补充说明
dstat的核心价值在于“一站式聚合监控”,可替代多款传统工具的组合使用,大幅提升运维效率,尤其适合实时排查系统综合瓶颈。其扩展模块(如--top-cpu、--top-io)能直接定位资源占用最高进程,无需再通过top、iotop等工具二次排查,形成“监控-定位”闭环。若需更精细化的专项监控(如TCP连接、磁盘分区I/O),可配合sar、iostat、ss等工具,形成“聚合监控+专项深挖”的完整排查体系。此外,dstat支持自定义插件扩展模块,可根据业务需求开发专属监控维度(如数据库连接数、应用响应时间),适配复杂运维场景。

浙公网安备 33010602011771号