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次
# 适用场景:系统高负载时快速定位核心原因,避免多模块干扰,聚焦关键进程

四、关键误区与注意事项

  1. 误区:默认模块覆盖所有场景 dstat默认模块未包含内存细节、进程总数等扩展信息,排查专项问题(如内存泄漏、I/O进程定位)需手动添加对应模块,避免因信息不全导致误判。
  2. 单位换算与显示规则 dstat自动适配数据单位(B/K/M/G),但需注意单位是二进制(KiB/MiB)而非十进制(KB/MB),与sar、vmstat保持一致;小流量场景下可能显示为0b,属正常现象,可缩短采集间隔观察瞬时值。
  3. 彩色输出与脚本采集冲突 脚本自动化采集时,彩色输出会包含控制字符,导致解析错误,需添加--nocolor选项关闭彩色,同时用--noheaders精简输出。
  4. 高频率采集的资源消耗 采集间隔过短(如0.5秒)且启用多个扩展模块(如--top-cpu、--top-mem),会消耗一定CPU资源,高负载系统建议将间隔设为1秒以上,避免加重系统负担。
  5. 模块兼容性问题 部分扩展模块(如--top-io)在低版本dstat(<0.7.0)中不支持,需升级版本(yum update dstat);不同Linux发行版的模块命名可能略有差异,可通过dstat --list查看支持的模块。
  6. 无历史数据回放能力 dstat仅支持实时监控与数据保存,无历史数据回放功能,需提前将数据保存到文件(-o选项),后续通过表格工具或脚本分析历史趋势,弥补此短板。

五、补充说明

dstat的核心价值在于“一站式聚合监控”,可替代多款传统工具的组合使用,大幅提升运维效率,尤其适合实时排查系统综合瓶颈。其扩展模块(如--top-cpu、--top-io)能直接定位资源占用最高进程,无需再通过top、iotop等工具二次排查,形成“监控-定位”闭环。若需更精细化的专项监控(如TCP连接、磁盘分区I/O),可配合sar、iostat、ss等工具,形成“聚合监控+专项深挖”的完整排查体系。此外,dstat支持自定义插件扩展模块,可根据业务需求开发专属监控维度(如数据库连接数、应用响应时间),适配复杂运维场景。

posted @ 2026-01-26 17:26  向闲而过  阅读(2)  评论(0)    收藏  举报