×

Linux综合性能监控工具dstat命令详解

hqy hqy 发表于2026-01-29 15:23:43 浏览3 评论0

抢沙发发表评论

1.dstat工具简介

dstat是一款功能强大的Linux系统资源监控工具,被誉为一款"全能的系统统计工具"。它能够实时收集并显示CPU、内存、磁盘I/O、网络流量、系统负载等多种性能指标,将所有关键数据集成在一个统一的界面中,为系统管理员提供全面的性能监控视图。

主要特点:

(1)多功能集成 - 替代vmstatiostatnetstatifstat等多个传统工具

(2)实时监控 - 支持动态刷新,实时展示系统状态

(3)高度可定制 - 可根据需求选择监控的指标和输出格式

(4)彩色显示 - 默认彩色输出,数据更直观

(5)插件扩展 - 支持丰富的插件系统

2.命令语法

dstat [-afv] [options..] [delay [count]]

参数结构说明:

  • -afv:常用标志选项
  • options:监控选项,用于指定要显示的统计信息
  • delay:刷新间隔时间(秒),默认值为1秒
  • count:刷新次数,默认值为无限次

基本用法示例:

(1)默认用法:每秒刷新,持续运行


dstat

图片

(2)指定刷新间隔:每2秒刷新一次

dstat 2

图片

(3)完整参数:每3秒刷新一次,总共刷新5次

dstat 3 5

图片

3.核心选项详解

3.1 常用标志选项

选项功能说明等价命令
-a
显示所有常用统计
-cdngy
-f
自动展开所有设备列表
-
-v
vmstat兼容模式
-pmgdsc -D total

3.2 基础监控选项
# CPU相关
-c, --cpu              # 启用CPU统计
-C 0,3,total           # 监控指定CPU(0号、3号和总计)

# 磁盘I/O
-d, --disk             # 启用磁盘统计
-D sda,total           # 监控指定磁盘(sda和总计)

# 内存相关
-m, --mem              # 启用内存统计
-s, --swap             # 启用Swap交换分区统计
-g, --page             # 启用内存分页统计

# 网络相关
-n, --net              # 启用网络统计
-N eth0,total          # 监控指定网卡(eth0和总计)

# 系统状态
-l, --load             # 启用系统负载统计
-p, --proc             # 启用进程统计
-y, --sys              # 启用系统统计
3.3 高级监控选项
# 系统底层统计
--aio                  # 异步I/O统计
--fs, --filesystem     # 文件系统统计
--ipc                  # IPC统计
--lock                 # 锁统计
--raw                  # 原始设备统计

# 网络协议统计
--socket               # 套接字统计
--tcp                  # TCP协议统计
--udp                  # UDP协议统计
--unix                 # Unix域套接字统计

# 系统内核统计
--vm                   # 虚拟内存统计
3.4 显示控制选项
# 输出格式控制
--bits                 # 以bit为单位显示字节值
--float                # 强制显示浮点数值
--integer              # 强制显示整数值

# 界面显示控制
--bw, --blackonwhite   # 为白色背景终端调整颜色
--nocolor              # 禁用颜色(隐含--noupdate)
--noheaders            # 禁用重复的标题行
--noupdate             # 禁用中间更新

# 输出到文件
--output filename.csv  # 将CSV格式输出写入文件
--profile              # 退出时显示性能分析统计

4.常用监控示例

(1)示例1:基础系统监控

监控CPU、磁盘、网络、内存分页和系统负载:

dstat -cdngy

图片

(2)示例2:磁盘I/O深度监控

监控指定磁盘并显示详细信息

dstat -d -D sda,sdb --disk-util
[root@yyzcdb81 ~]# dstat -d -D sda,sdb --disk-util
--dsk/sda-----dsk/sdb-- sda--sdb-
 read  writ: read  writ|util:util
1552B 2538B:1420B 1224B|0.02:0.02
   0     0 :   0     0 |   0:   0
   0     0 :   0     0 |   0:   0
   0     0 :   0    12k|   0:0.10
   0     0 :   0     0 |   0:   0
   0     0 :   0     0 |   0:   0
   0     0 :   0     0 |   0:   0
   0     0 :   0     0 |   0:   0
   0     0 :   0     0 |   0:   0^C
[root@yyzcdb81 ~]

图片

输出字段说明:

  • dsk/sda:sda磁盘的读写
  • dsk/sdb: sdb磁盘的读写
  • util: 磁盘利用率百分比

(3)示例3:网络性能监控

监控指定网卡的网络流量

[root@yyzcdb81 ~]# dstat -n -N esn33,total --socket --tcp
-net/total- ------sockets------ ----tcp-sockets----
 recv  send|tot tcp udp raw frg|lis act syn tim clo
   0     0 |  1  10   6   0   0| 18   3   0   0   0
  60B  634B|  1  10   6   0   0| 18   3   0   0   0
  60B  282B|  1  10   6   0   0| 18   3   0   0   0
  60B  282B|  1  10   6   0   0| 18   3   0   0   0
  60B  282B|  1  10   6   0   0| 18   3   0   0   0
  60B  282B|  1  10   6   0   0| 18   3   0   0   0
  60B  282B|  1  10   6   0   0| 18   3   0   0   0
  60B  282B|  1  10   6   0   0| 18   3   0   0   0
  60B  282B|  1  10   6   0   0| 18   3   0   0   0^C
[root@yyzcdb81 ~]

图片

可监控的TCP状态:

  • tcp-lis: 监听状态的TCP连接
  • tcp-act: 活跃状态的TCP连接
  • tcp-syn: SYN状态的连接
  • tcp-tim: TIME_WAIT状态的连接

(4)示例4:内存与进程监控

监控内存使用和进程状态

dstat -cms -p --top-cpu --top-mem

图片

显示最耗资源的进程:

most-expensive: cpu process |   memory process

(5)示例5:实时综合监控面板

创建全面的系统监控面板:下面命令同时显示时间戳、CPU、内存、磁盘、网络、Swap等核心指标,并深入监控异步I/O、文件系统、进程通信、锁、原始设备、套接字和TCP/UDP连接等底层系统活动。

dstat -tcmdns --aio --fs --ipc --lock --raw --socket --tcp --udp

图片

5.高级应用技巧

5.1数据记录与分析

将监控数据保存到CSV文件:

[root@yyzcdb81 ~]# dstat -tcdnm --output /var/log/dstat.csv 5
----system---- ----total-cpu-usage---- -dsk/total- -net/total- ------memory-usage-----
     time     |usr sys idl wai hiq siq| read  writ| recv  send| used  buff  cach  free
28-01 14:47:09|  0   0 100   0   0   0|5665B   29k|   0     0 |1542M  208k 5793M  468M
28-01 14:47:14|  0   0 100   0   0   0|   0  6554B|  60B  480B|1542M  208k 5793M  468M
28-01 14:47:19|  0   0  99   0   0   0|   0    13k|  84B  393B|1542M  208k 5793M  468M
28-01 14:47:24|  0   0 100   0   0   0|   0    23k|  60B  378B|1542M  208k 5793M  468M
28-01 14:47:29|  0   0 100   0   0   0|   0  6554B|  60B  375B|1542M  208k 5793M  468M
28-01 14:47:34|  0   0 100   0   0   0|   0    39k|  60B  381B|1542M  208k 5793M  468M
28-01 14:47:39|  0   0 100   0   0   0|   0    13k|  60B  378B|1542M  208k 5793M  468M
28-01 14:47:44|  0   0 100   0   0   0|   0    27k|  60B  381B|1542M  208k 5793M  468M
28-01 14:47:49|  0   0 100   0   0   0|   0    20k|  60B  381B|1542M  208k 5793M  468M
28-01 14:47:54|  0   0 100   0   0   0|   0    24k|  60B  381B|1542M  208k 5793M  468M
28-01 14:47:56|  0   0 100   0   0   0|   0     0 |  60B  378B|1542M  208k 5793M  468M^C
[root@yyzcdb81 ~]

查看保存的数据:

[root@yyzcdb81 ~]# cat /var/log/dstat.csv
"Dstat 0.7.2 CSV output"
"Author:","Dag Wieers <dag@wieers.com>",,,,"URL:","http://dag.wieers.com/home-made/dstat/"
"Host:","yyzcdb81",,,,"User:","root"
"Cmdline:","dstat -tcdnm --output /var/log/dstat.csv 5",,,,"Date:","28 Jan 2026 14:47:09 CST"

"system","total cpu usage",,,,,,"dsk/total",,"net/total",,"memory usage",,,
"time","usr","sys","idl","wai","hiq","siq","read","writ","recv","send","used","buff","cach","free"
28-01 14:47:09,0.200,0.082,99.678,0.019,0.0,0.021,5665.123,29255.427,0.0,0.0,1616629760.0,212992.0,6074384384.0,490602496.0
28-01 14:47:14,0.051,0.051,99.847,0.0,0.0,0.051,0.0,6553.600,60.0,480.400,1616470016.0,212992.0,6074388480.0,490758144.0
28-01 14:47:19,0.255,0.255,99.491,0.0,0.0,0.0,0.0,13721.600,84.400,393.200,1616580608.0,212992.0,6074388480.0,490647552.0
28-01 14:47:24,0.254,0.102,99.593,0.0,0.0,0.051,0.0,23961.600,60.0,378.0,1616580608.0,212992.0,6074388480.0,490647552.0
28-01 14:47:29,0.204,0.051,99.694,0.051,0.0,0.0,0.0,6553.600,60.0,374.800,1616580608.0,212992.0,6074388480.0,490647552.0
28-01 14:47:34,0.255,0.153,99.592,0.0,0.0,0.0,0.0,40140.800,60.0,381.200,1616707584.0,212992.0,6074388480.0,490520576.0
28-01 14:47:39,0.306,0.102,99.541,0.0,0.0,0.051,0.0,13107.200,60.0,378.0,1616707584.0,212992.0,6074388480.0,490520576.0
28-01 14:47:44,0.153,0.102,99.694,0.051,0.0,0.0,0.0,27852.800,60.0,381.200,1616707584.0,212992.0,6074388480.0,490520576.0
28-01 14:47:49,0.255,0.102,99.643,0.0,0.0,0.0,0.0,20172.800,60.0,381.200,1616723968.0,212992.0,6074388480.0,490504192.0
28-01 14:47:54,0.306,0.153,99.541,0.0,0.0,0.0,0.0,24780.800,60.0,381.200,1616723968.0,212992.0,6074388480.0,490504192.0
[root@yyzcdb81 ~]
5.2特定时间点监控

监控特定时间段(每2秒采样,共采样30次):

[root@yyzcdb81 ~]# timeout 60 dstat -cdnm 2
----total-cpu-usage---- -dsk/total- -net/total- ------memory-usage-----
usr sys idl wai hiq siq| read  writ| recv  send| used  buff  cach  free
  0   0 100   0   0   0|5663B   29k|   0     0 |1542M  208k 5793M  468M
  0   0 100   0   0   0|   0    17k|  60B  586B|1542M  208k 5793M  468M
  0   0 100   0   0   0|   0    25k|  60B  354B|1542M  208k 5793M  468M
  0   0 100   0   0   0|   0  6144B|  60B  346B|1542M  208k 5793M  468M
  0   0 100   0   0   0|   0    16k|  60B  354B|1542M  208k 5793M  468M
  0   0 100   0   0   0|   0    80k|  60B  346B|1542M  208k 5793M  468M
  0   0  99   0   0   0|   0    82k|  60B  354B|1542M  208k 5793M  467M
  0   0 100   0   0   0|   0    16k|  60B  354B|1542M  208k 5793M  467M
  0   0  99   0   0   0|   0   186k|  60B  346B|1542M  208k 5793M  467M
  0   0 100   0   0   0|   0  2048B|  60B  346B|1542M  208k 5793M  467M
  0   0 100   0   0   0|   0    16k|  60B  354B|1542M  208k 5793M  467M
  0   0 100   0   0   0|   0    16k|  60B  346B|1542M  208k 5793M  467M
  0   0 100   0   0   0|   0     0 |  60B  346B|1542M  208k 5793M  467M
  0   0 100   0   0   0|   0    16k|  60B  354B|1542M  208k 5793M  467M
  0   0 100   0   0   0|   0    26k|  60B  354B|1542M  208k 5793M  467M
  0   0 100   0   0   0|   0     0 |  60B  346B|1542M  208k 5793M  467M
  0   0 100   0   0   0|   0    26k|  60B  354B|1542M  208k 5793M  467M
  1   0  99   0   0   0|   0  2048B|  60B  346B|1542M  208k 5793M  467M^C
[root@yyzcdb81 ~]

# 结合时间戳监控
dstat -tcd --epoch 5
5.3 插件使用

查看可用插件:

[root@yyzcdb81 ~]# dstat --list
internal:
 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
/usr/share/dstat:
 battery, battery-remain, cpufreq, dbus, disk-tps, disk-util, dstat, dstat-cpu, dstat-ctxt, dstat-mem, fan, freespace, gpfs, gpfs-ops, 
 helloworld, innodb-buffer, innodb-io, innodb-ops, lustre, memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-conn, mysql5-io, 
 mysql5-keys, net-packets, nfs3, nfs3-ops, nfsd3, nfsd3-ops, ntp, postfix, power, proc-count, qmail, rpc, rpcd, sendmail, snooze, squid, 
 test, thermal, top-bio, top-bio-adv, top-childwait, top-cpu, top-cpu-adv, top-cputime, top-cputime-avg, top-int, top-io, top-io-adv, 
 top-latency, top-latency-avg, top-mem, top-oom, utmp, vm-memctl, vmk-hba, vmk-int, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi
[root@yyzcdb81 ~]

使用MySQL插件监控数据库:

dstat --mysql5-conn --mysql5-cmds

使用Nginx插件监控Web服务器:

dstat --nginx-req --nginx-stat
5.4与其他工具结合
# 配合watch命令高亮变化
watch -n 1 -d dstat -cd

# 通过管道筛选关键信息
dstat -cd | grep -E "(usr|idl|read|writ)"

# 实时监控并触发报警
dstat -cdn 1 | awk '$3 > 90 {print "高CPU使用率警告!"}'

6.常用场景配置

6.1 Web服务器监控
dstat -tcdn --http --tcp --load --top-io 2
6.2 数据库服务器监控
dstat -tcdnm --io --lock --aio --raw 3
6.3 实时故障排查
dstat -af --top-cpu --top-mem --top-io 1
6.4 长期性能趋势分析
# 后台运行记录性能数据
nohup dstat -tcdnm --output /var/log/perf_$(date +%Y%m%d).csv 30 > /dev/null &

7. 输出字段详解

7.1 CPU使用率字段
  • usr:用户空间CPU使用率
  • sys:内核空间CPU使用率
  • idl:CPU空闲率
  • wai:I/O等待CPU时间
  • hiq:硬件中断
  • siq:软件中断
7.2 磁盘I/O字段
  • read:磁盘读取速度(KB/s)
  • writ:磁盘写入速度(KB/s)
  • used:磁盘使用百分比
7.3网络流量字段
  • recv:网络接收速度(KB/s)
  • send:网络发送速度(KB/s)
7.4内存字段
  • used:已使用内存
  • buff:缓冲区内存
  • cach:缓存内存
  • free:空闲内存

8.实用技巧与注意事项

# 实用技巧:

快速检查dstat -a快速查看系统整体状态

精确监控:使用-C-D-N指定特定设备

颜色标记:红色通常表示高负载,绿色表示正常

历史对比:保存CSV文件用于不同时段性能对比


# 注意事项:

(1)部分插件需要额外安装依赖

(2)高频率监控(如0.1秒)可能增加系统负载

(3)长期监控需注意日志文件大小

(4)在生产环境使用前建议在测试环境验证

# 性能影响:

监控dstat自身资源消耗(开另一个终端)

pidstat -p $(pgrep dstat) 1 3

图片

9.总结

dstat作为Linux系统监控的瑞士军刀,通过一个命令提供了:

全面的监控视角 - 覆盖系统所有关键资源

灵活的配置选项 - 按需定制监控内容

实时数据分析 - 及时发现性能问题

历史记录功能 - 支持事后分析

掌握dstat的使用,能够显著提升系统监控和故障排查的效率,逐步熟悉各种选项和组合,最终形成适合自己工作场景的监控方案。


打赏

本文链接:https://kinber.cn/post/6199.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客