pidstat -d 是什么
pidstat -d 是 sysstat 套件提供的进程级 IO 统计,按固定间隔输出每个进程的读写 KB/s 与 IO 等待时间。相比交互式的 iotop,它的输出稳定、可直接解析,适合放进监控采集管道与工单留证。
基本信息
| 适用平台 | Linux(sysstat 包) |
|---|---|
| 基本用法 | pidstat -d 1 5:每 1 秒采一次共 5 次 |
| 指定进程 | pidstat -d -p 12345 1 5,多个 PID 用逗号分隔 |
| 关键列 | UID、PID、kB_rd/s、kB_wr/s、iodelay |
| 常用扩展 | -h 单行输出便于脚本解析;-t 关联线程名 |
典型使用场景
- 定位打盘进程:设备 await 升高时确认是哪几个进程在持续读写
- 量化 IO 阻塞:iodelay 反映进程被 IO 阻塞的时间,比吞吐更贴近业务卡顿
- 监控采集:定时执行并解析输出,形成进程级 IO 趋势曲线
- 版本对比:同一服务迭代前后压测,比较读写量是否异常增长
- 容器与虚拟机核对:与宿主 iostat 互证,确认瓶颈归属
常用命令
常用命令
pidstat -d 1 5 # 全系统进程 IO,1 秒一次共 5 次
pidstat -d -p 12345 1 5 # 只看指定 PID
pidstat -dh 1 5 | tail -5 # 单行格式输出,便于脚本解析
pidstat -dl 1 5 # 附带命令名,确认进程身份输出逐列读法
| 列 | 含义 | 判读 |
|---|---|---|
| UID | 进程属主 | 用于识别服务账号 |
| PID | 进程号 | 配合 ps -p 定位命令行 |
| kB_rd/s | 每秒读取 KB | 突增通常对应回源读取或全表扫描 |
| kB_wr/s | 每秒写入 KB | 日志落盘与数据库刷盘的主要证据 |
| iodelay | 被 IO 阻塞的累计时钟周期 | 与速率无关,直接反映等待时间 |
iodelay 的单位是时钟周期而非毫秒,需要按系统时钟频率换算成秒。读写量不大但 iodelay 高的进程,通常是在等盘而不是在压盘,这才是业务卡顿的直接原因。
配套观测
配套观测
iostat -dxm 1 5 # 设备级:确认盘本身是否饱和
pidstat -d -p $(pgrep -d, -f mysqld) 1 5 # 一次观察一组同服务进程
cat /proc/12345/io # 交叉核对:该进程的累计读写字节数选用建议
- 现场交互排障用 iotop,留档与告警采集用 pidstat -d
- 需要进程身份时加 -l 显示命令名,避免对错进程动手
- 容器内采集要把宿主与容器两端数据一起看
- 把 iodelay 与业务响应时间对照,才能判断阻塞是否已影响用户
在容器与虚拟机中,/proc 的可见范围有限,pidstat 可能采集不到真实写入的进程;定位磁盘异常时以宿主视角的数据为准。