前置
前言:dstat是一个集成的工具,和sysstat工具集类似,可以看cpu、disk、network、memory、page等“部分”数据,使用场景:用一条命令同时观察 CPU、磁盘、网络、分页、中断、上下文切换等系统指标,快速判断性能问题大概出在哪个方向。
安装部署:以centos为例,yum源内有集成包,可直接安装
yum install dstat -y [root@n222-249-139-250 ~]# yum list | grep dstat dstat.noarch 0.7.2-12.el7 base [root@n222-249-139-250 ~]# rpm -qa | grep dstat dstat-0.7.2-12.el7.noarch
使用方法
使用方法:
1.可直接输出dstat,直接全量展示,c,d,n,g,y,等同于dstat -cdngy,平时建议参数可附加-t,展示时间,但是要附加-t的话,要补全参数,不然只有时间哈
dstat -tcdngy
具体参数拆开看,刚好目前业务场景主要需要c,d,n指标
[root@mcdn-qny-zqzq-cmcc-y-426 ~]# dstat -tcdngy
----system---- ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
time |usr sys idl wai hiq siq| read writ| recv send| in out | int csw
21-07 21:35:13| 5 5 86 1 1 2| 23M 10M| 0 0 | 0 0 | 88k 58k
21-07 21:35:14| 12 19 59 4 2 4| 86M 12M| 20M 71M| 0 0 | 202k 135k
21-07 21:35:15| 10 16 64 3 2 4| 81M 15M| 16M 70M| 0 0 | 183k 120k
21-07 21:35:16| 12 13 65 4 2 4| 88M 12M| 16M 71M| 0 0 | 187k 123k
21-07 21:35:17| 12 12 67 3 2 4| 78M 16M| 17M 70M| 0 0 | 183k 119k
21-07 21:35:18| 10 10 70 4 2 4| 85M 13M| 17M 70M| 0 0 | 183k 116k
21-07 21:35:19| 11 11 67 3 2 4| 81M 12M| 18M 69M| 0 0 | 189k 122k
21-07 21:35:20| 11 11 68 4 2 4| 82M 17M| 17M 71M| 0 0 | 188k 121k
21-07 21:35:21| 9 9 72 4 2 4| 87M 14M| 14M 70M| 0 0 | 169k 108k
21-07 21:35:22| 11 11 69 3 2 4| 76M 13M| 17M 70M| 0 0 | 186k 119k
21-07 21:35:23| 12 11 67 4 2 4| 88M 15M| 17M 70M| 0 0 | 186k 122k
CPU 统计
dstat -tc
----system---- ----total-cpu-usage----
time |usr sys idl wai hiq siq
21-07 21:39:02| 5 5 85 1 1 2
21-07 21:39:03| 10 11 68 4 2 4
21-07 21:39:04| 10 10 69 4 2 4
21-07 21:39:05| 10 10 69 4 2 5
21-07 21:39:06| 10 10 69 4 2 4
21-07 21:39:07| 14 15 59 4 2 5
21-07 21:39:08| 14 13 62 4 2 4
21-07 21:39:09| 16 15 57 4 3 5
21-07 21:39:10| 16 15 57 4 2 5
21-07 21:39:11| 14 14 61 4 3 5
CPU 区域由以下六个指标组成,各项之和约为 100%,按百分比显示。
| 字段 | 中文含义 | 常见场景与判断方向 |
|---|---|---|
usr |
用户态 CPU | 业务程序自身计算消耗,例如数据处理、校验、压缩、加密、JSON 解析或程序死循环。占用高时可结合 PID 查看具体程序,例如 ls -l /proc/<pid>/exe。 |
sys |
内核态 CPU | 系统调用、网络协议栈、文件系统、内存管理、NAT、conntrack、容器网络等内核工作。数值高表示内核开销较大。 |
idl |
CPU 空闲率 | 越接近 0,表示 CPU 越接近饱和。需要继续判断是 usr、sys、wai 还是中断占用较高。 |
wai |
I/O 等待 | CPU 等待块设备 I/O 完成的时间。持续偏高时,应继续使用 iostat -x 查看磁盘延迟、队列和利用率。 |
hiq |
硬中断 | CPU 处理硬件中断的时间,例如网卡、磁盘或其他硬件设备产生的 IRQ。 |
siq |
软中断 | 常见于网络收发和高 PPS 场景,与 mpstat 中的 %soft 类似。偏高时可结合网卡队列、IRQ、RSS/RPS、RX/TX 丢包一起分析。 |
| 观察现象 | 优先排查方向 |
|---|---|
usr 高 |
业务程序计算、压缩、加密、解析、GC、死循环。 |
sys 高 |
系统调用、网络栈、NAT、conntrack、文件系统、上下文切换。 |
wai 高 |
磁盘延迟、随机 I/O、队列拥塞、底层存储异常。 |
hiq/siq 高 |
网卡中断、网络高 PPS、小包、IRQ 或队列分布不均。 |
idl 接近 0 |
CPU 接近饱和,需要结合其他字段判断具体瓶颈。 |
局限性:dstat -c 默认显示的是整机 CPU 平均值,适合看总体开销,但不适合直观分析单核负载不均。虽然 dstat -C 0,1,2,3 支持指定核心,但核心较多时建议直接使用 mpstat -P ALL 1。
常用:mpstat -P all 1 09:50:29 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 09:50:30 PM all 12.94 0.00 13.12 4.25 2.38 5.00 1.12 0.00 0.00 61.19 09:50:30 PM 0 13.86 0.00 12.87 6.93 2.97 6.93 0.00 0.00 0.00 56.44 09:50:30 PM 1 8.00 0.00 11.00 7.00 2.00 6.00 2.00 0.00 0.00 64.00 09:50:30 PM 2 16.16 0.00 14.14 5.05 2.02 3.03 2.02 0.00 0.00 57.58 09:50:30 PM 3 10.00 0.00 9.00 2.00 2.00 0.00 3.00 0.00 0.00 74.00 09:50:30 PM 4 14.14 0.00 14.14 6.06 3.03 7.07 0.00 0.00 0.00 55.56 09:50:30 PM 5 10.00 0.00 11.00 4.00 1.00 1.00 3.00 0.00 0.00 70.00 09:50:30 PM 6 16.50 0.00 13.59 5.83 1.94 4.85 0.97 0.00 0.00 56.31 09:50:30 PM 7 8.00 0.00 12.00 5.00 3.00 4.00 1.00 0.00 0.00 67.00 09:50:30 PM 8 15.00 0.00 15.00 2.00 3.00 8.00 1.00 0.00 0.00 56.00 09:50:30 PM 9 9.00 0.00 13.00 3.00 2.00 7.00 1.00 0.00 0.00 65.00 09:50:30 PM 10 18.00 0.00 14.00 4.00 3.00 4.00 1.00 0.00 0.00 56.00 09:50:30 PM 11 10.89 0.00 11.88 2.97 2.97 3.96 0.99 0.00 0.00 66.34 09:50:30 PM 12 21.21 0.00 17.17 4.04 3.03 3.03 0.00 0.00 0.00 51.52 09:50:30 PM 13 9.90 0.00 12.87 3.96 1.98 8.91 0.99 0.00 0.00 61.39 09:50:30 PM 14 16.16 0.00 15.15 3.03 3.03 5.05 1.01 0.00 0.00 56.57 09:50:30 PM 15 9.00 0.00 13.00 2.00 2.00 8.00 1.00 0.00 0.00 65.00
磁盘统计
| 参数 | 作用 | 输出含义 |
|---|---|---|
-d |
启用磁盘统计 | 显示磁盘每秒读写吞吐量,即 read 和 writ。 |
-D sdb |
指定磁盘 | 只查看指定设备,多个磁盘可使用逗号分隔。 |
--disk-tps |
显示磁盘操作次数 | reads 和 writs 表示每秒完成的读写 I/O 次数,可近似理解为读写 IOPS。 |
| 换算项目 | 公式 |
|---|---|
| 吞吐量 | 吞吐量(MiB/s)= IOPS × 平均 I/O 大小(KiB)÷ 1024 |
| 平均单次 I/O 大小 | 平均 I/O 大小(KiB)= 吞吐量(MiB/s)× 1024 ÷ IOPS |
| IOPS | IOPS = 吞吐量(MiB/s)× 1024 ÷ 平均 I/O 大小(KiB) |
通常建议指定单块磁盘观察。PCDN 机器常见系统盘、数据盘并存,部分设备还可能使用 RAID;只看 total 容易掩盖单盘热点,因此推荐通过 -D 指定具体磁盘。
常用:
dstat -tD sdb -d --disk-tps
----system---- --dsk/sdb-- --dsk/sdb--
time | read writ|reads writs
21-07 22:02:30| 32M 13M| 316 40
21-07 22:02:31| 83M 33M| 961 168
21-07 22:02:32| 90M 36M| 983 95
21-07 22:02:33| 90M 29M| 999 70
21-07 22:02:34| 83M 37M| 931 96
21-07 22:02:35| 86M 34M| 957 93
21-07 22:02:36| 96M 49M|1036 202
21-07 22:02:37| 85M 32M| 928 76
以 21-07 22:02:32 | 90M 36M | 983 95 为例:
| 方向 | 吞吐量 | IOPS | 平均单次 I/O | 计算过程 |
|---|---|---|---|---|
| 读 | 90 MiB/s | 983 次/s | 约 94 KiB/次 | 90 × 1024 ÷ 983 ≈ 94 |
| 写 | 36 MiB/s | 95 次/s | 约 388 KiB/次 | 36 × 1024 ÷ 95 ≈ 388 |
该数据表现为:读操作次数多、单次读 I/O 较小;写操作次数少、单次写 I/O 较大,符合 PCDN 高频读取、少量大块写入的常见特征。
局限性:无法查看磁盘%util等指标,单一的读写不好判断磁盘瓶颈,,特别是读写延迟,可以结合iostat,iotop排查
iostat -x -1
网络统计
| 参数 | 作用 | 输出字段 |
|---|---|---|
-n |
显示网络吞吐量 | recv 为每秒接收数据量,send 为每秒发送数据量。 |
-N eth0 |
指定网卡 | 只查看指定接口,多个接口可使用逗号分隔。 |
--net-packets |
显示每秒收发包数量 | #recv 和 #send,即接收 PPS 和发送 PPS。 |
| 分析点 | 判断方法 |
|---|---|
| 吞吐量 | 判断入流、出流大小以及链路利用率。PCDN 常见发送流量高于接收流量。 |
| PPS | 同样带宽下,PPS 越高通常表示平均包越小,CPU、软中断、NAT 和 conntrack 压力可能越高。 |
| 平均包大小 | 平均包大小(Bytes)≈ 吞吐量(MiB/s)× 1024 × 1024 ÷ PPS。 |
| CPU 联动 | 结合 sys、hiq、siq 和 idl 判断网络处理是否正在消耗大量 CPU。 |
| 错误与丢包 | dstat 不直接显示网卡错误、丢包和 TCP 重传,需要结合 ip -s link、sar -n EDEV、ethtool -S 等工具。 |
常用:
dstat -t -N eth0 -n --net-packets
----system---- --net/eth0- --pkt/eth0-
time | recv send|#recv #send
21-07 22:20:56| 0 0 | 0 0
21-07 22:20:57| 19M 74M|28.1k 73.8k
21-07 22:20:58| 17M 70M|26.8k 69.7k
21-07 22:20:59| 16M 73M|25.6k 70.9k
21-07 22:21:00| 15M 73M|25.0k 70.6k
21-07 22:21:01| 16M 71M|25.3k 69.7k
21-07 22:21:02| 14M 71M|24.3k 69.5k
21-07 22:21:03| 17M 72M|26.8k 72.4k
21-07 22:21:04| 14M 73M|24.5k 70.5k
21-07 22:21:05| 13M 70M|23.1k 67.3k
页面与系统统计
| 参数 | 作用 | 主要字段 |
|---|---|---|
-g |
页面调入、调出统计 | in、out,用于观察分页活动;不要与普通磁盘吞吐直接混为一谈。 |
-y |
系统事件统计 | int 为每秒中断次数,csw 为每秒上下文切换次数。 |
帮助
附件:dstat --help
用法:
dstat [-afv] [选项...] [刷新间隔 [刷新次数]]
功能:
一个用于生成系统资源统计信息的综合性能监控工具。
Dstat 选项:
-c, --cpu
启用 CPU 使用率统计。
-C 0,3,total
指定要显示的 CPU,例如显示 CPU0、CPU3 和全部 CPU 汇总。
多个 CPU 之间用逗号分隔。
-d, --disk
启用磁盘吞吐量统计。
默认显示磁盘每秒读取和写入的数据量。
-D total,hda
指定要统计的磁盘,例如显示 hda 和所有磁盘汇总。
多个设备之间用逗号分隔。
-g, --page
启用页面调入、调出统计。
-i, --int
启用中断统计。
-I 5,eth2
指定要显示的中断。
例如显示 5 号中断,以及 eth2 网卡使用的中断。
-l, --load
启用系统负载统计。
通常显示 1 分钟、5 分钟和 15 分钟负载。
-m, --mem
启用内存使用情况统计。
-n, --net
启用网络吞吐量统计。
显示每秒接收和发送的数据量。
-N eth1,total
指定要统计的网络接口。
例如显示 eth1 和所有网卡汇总。
-p, --proc
启用进程状态统计。
通常显示可运行、阻塞和新创建的进程数量。
-r, --io
启用 I/O 操作统计。
显示已经完成的 I/O 请求数量,即读写操作次数。
-s, --swap
启用 Swap 交换空间统计。
-S swap1,total
指定要统计的 Swap 设备。
例如显示 swap1 和所有 Swap 汇总。
-t, --time
启用时间和日期输出。
-T, --epoch
启用 Unix 时间戳输出。
显示从 1970-01-01 00:00:00 UTC 开始累计的秒数。
-y, --sys
启用系统统计。
通常显示每秒中断次数和上下文切换次数。
其他统计选项:
--aio
启用异步 I/O(AIO)统计。
--fs, --filesystem
启用文件系统统计。
通常包括打开文件数、inode 等信息,具体取决于版本。
--ipc
启用进程间通信 IPC 统计。
例如消息队列、信号量和共享内存。
--lock
启用文件锁统计。
--raw
启用原始套接字统计。
--socket
启用 Socket 套接字统计。
--tcp
启用 TCP 状态统计。
--udp
启用 UDP 状态统计。
--unix
启用 Unix Domain Socket 统计。
--vm
启用虚拟内存统计。
插件选项:
--插件名称
根据插件名称启用某个插件。
具体插件名称可以查看手册或者使用 --list。
--list
列出当前系统上所有可用的 dstat 插件。
组合选项:
-a, --all
等同于:
-c -d -n -g -y
即同时显示:
CPU、磁盘、网络、页面和系统统计。
这也是直接执行 dstat 时的默认显示内容。
-f, --full
自动展开以下设备列表:
-C CPU 列表
-D 磁盘列表
-I 中断列表
-N 网卡列表
-S Swap 列表
例如自动显示所有 CPU、磁盘、网卡等,而不是只显示 total。
-v, --vmstat
等同于:
-p -m -g -d -s -c -D total
以类似 vmstat 的方式显示:
进程、内存、页面、磁盘、Swap、CPU 和磁盘汇总。
数值显示选项:
--bits
对原本以字节表示的数据强制使用 bit 显示。
例如网络流量默认可能显示 MiB/s,
使用 --bits 后可以按 Mbit/s 显示。
--float
强制使用浮点数显示数值。
--integer
强制使用整数显示数值。
终端显示选项:
--bw, --blackonwhite
调整终端颜色,使其适合白色背景、黑色文字的终端。
--nocolor
禁用彩色输出。
同时隐含启用 --noupdate。
--noheaders
禁用重复打印表头。
--noupdate
禁用当前行的中间刷新。
每个采样周期只输出最终结果。
--output 文件
将统计结果以 CSV 格式写入指定文件。
--profile
在退出 dstat 时显示 dstat 自身的性能分析统计。
位置参数:
delay
每次刷新之间的间隔时间,单位为秒。
默认值为 1 秒。
count
退出前显示多少次统计结果。
默认不限制,一直运行,直到按 Ctrl+C 停止。
常用工具对比
| 工具 | 最适合查看的内容 |
|---|---|
dstat |
快速综合总览,判断 CPU、磁盘、网络、内存等问题方向。 |
vmstat |
CPU、运行队列、内存、Swap 和 I/O 等待。 |
iostat -x |
磁盘延迟、队列深度、吞吐量和设备利用率。 |
mpstat |
每个 CPU 核心、硬中断和软中断分布。 |
pidstat |
精确到进程或线程的 CPU、内存、I/O 和上下文切换。 |
sar |
历史数据、持续统计、网卡流量、错误和 TCP 指标。 |
free |
当前内存和 Swap 容量使用情况。 |
ss |
TCP、UDP 和 Socket 连接状态。 |
top/htop |
交互式查看进程和实时资源占用。 |
```text
可用字段(用于 --output 或 -o):
NAME 设备名称
KNAME 内核内部设备名称
MAJ:MIN 主设备号:次设备号
FSTYPE 文件系统类型
MOUNTPOINT 设备挂载位置
LABEL 文件系统标签
UUID 文件系统 UUID
PARTTYPE 分区类型 UUID
PARTLABEL 分区标签
PARTUUID 分区 UUID
PARTFLAGS 分区标志
RA 设备预读大小(read-ahead)
RO 是否为只读设备
RM 是否为可移除设备
HOTPLUG 是否为热插拔设备,例如 USB、PCMCIA 等
MODEL 设备型号
SERIAL 磁盘序列号
SIZE 设备容量
STATE 设备状态
OWNER 设备节点所属用户
GROUP 设备节点所属用户组
MODE 设备节点权限
ALIGNMENT 对齐偏移量
MIN-IO 最小 I/O 大小
OPT-IO 最优 I/O 大小
PHY-SEC 物理扇区大小
LOG-SEC 逻辑扇区大小
ROTA 是否为旋转磁盘
1 = 机械硬盘
0 = 固态硬盘或非旋转设备
SCHED I/O 调度器名称
RQ-SIZE 请求队列大小
TYPE 设备类型,例如 disk、part、lvm、crypt、rom
DISC-ALN 丢弃操作(discard/TRIM)对齐偏移量
DISC-GRAN 丢弃操作最小粒度
DISC-MAX 单次丢弃操作支持的最大字节数
DISC-ZERO 丢弃后数据是否保证为零
WSAME WRITE SAME 操作支持的最大字节数
WWN 全球唯一存储设备标识符
RAND 是否增加随机性
PKNAME 父设备的内核内部名称
HCTL SCSI 设备地址:
Host:Channel:Target:Lun
主机:通道:目标:LUN
TRAN 设备传输接口类型
例如 sata、sas、usb、nvme、ata
SUBSYSTEMS 设备所属的内核子系统链,已去重
REV 设备固件或硬件修订版本
VENDOR 设备厂商
更多详细信息请查看:
man lsblk
```
常用
系统综合总览 dstat -tcdngy 1 查看cpu、网卡吞吐流量,网络数据包pps dstat -tcn -N eth0 --net-packets 1 查看磁盘吞吐和iops dstat -td -D sdb --disk-tps 1 内存和 Swap dstat -tms 1
© 版权声明
文章版权归作者所有,未经允许请勿转载。