iostat 通常由 sysstat 软件包提供,用于报告 CPU 和块设备活动。应结合重复采样和应用延迟进行分析:吞吐量或利用率本身并不能证明存储正在造成用户可见的问题。
进程利用率 · 第 5 课
I/O 监控
学习如何使用 iostat 样本调查 CPU 和块设备活动。
收集有效样本
可以每秒收集一次扩展设备统计信息:
$ iostat -xz 1
在常见实现中,第一份报告包含系统启动以来的平均值,后续报告则覆盖各自的采样间隔。-x 选项增加扩展字段,-z 则隐藏无活动设备。应等待多个间隔,以捕获正常和异常时段。
第一份 iostat 报告通常表示什么?
阅读 CPU 字段
CPU 部分通常包括用户时间(%user)、系统时间(%system)、空闲时间(%idle)、I/O 等待时间(%iowait)和虚拟机窃取时间(%steal)。I/O 等待是系统存在尚未完成的 I/O 请求时 CPU 的空闲时间,并不是磁盘繁忙程度的百分比。
%iowait 描述什么?
阅读设备字段
字段名称会随 sysstat 版本而变化,但常用概念包括:
- 每秒读写操作数或数据量表示工作负载速率。
await表示平均请求延迟,其中包括排队时间和服务时间。- 平均队列大小字段表示正在等待或处理的请求。
%util表示设备存在 I/O 活动的时间占总时间的百分比。
对于简单的串行设备,较高的 %util 可能表示已经饱和;但对于并行存储、阵列或虚拟设备,它不能直接换算为性能容量。应把延迟与设备设计、工作负载模式和服务目标进行比较。
哪个字段与平均 I/O 请求延迟最直接相关?
关联分析证据
下结论前,应先把设备名称对应到挂载点和底层设备:
$ lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS
$ findmnt
然后将 iostat 的各个间隔与应用响应时间、数据库或文件系统指标以及进程级 I/O 相互关联。设备映射器、RAID、容器和网络后端存储都可能增加额外层次,需要使用各自对应的工具检查。
看到设备的 %util 较高后,应该怎么做?
课程已完成
你已完成 I/O 监控
现在,你可以把 iostat 用作 I/O 调查中的证据。
收集多个扩展统计采样间隔。
区分 CPU 的 I/O 等待时间与设备繁忙时间。
综合解读延迟、排队、吞吐量和利用率。
将设备映射到工作负载,并验证对应用的影响。