首页/系统/信创系统运维速查/磁盘 IO 高的定位
常见问题65 条

磁盘 IO 高的定位

系统卡顿但 CPU 不高时查 IO:iostat 看 %util 与 await,iotop 找写盘大户,再判断业务高峰、日志风暴还是磁盘故障。

信创系统运维速查系统更新于 2026-10-13

IO 高为什么让整机变慢

磁盘是相对慢的部件,当读写请求排队时,等待时间会快速上升,表现为处理器不忙但业务响应缓慢:日志写入阻塞、数据库提交变慢、页面加载等待。排查的核心不是看磁盘使用率的高低,而是看等待时间与队列长度是否长期处于高位。

先分层再定责

第一层看磁盘指标,确认是随机读、顺序写还是两者都在等待;第二层按进程统计,找出真正产生读写量的程序;第三层结合业务判断,是高峰写入、日志刷盘、批量任务还是介质劣化。分层之后结论才站得住,也便于和业务方沟通。

基本信息

磁盘层指标利用率、平均等待、每秒读写次数与吞吐
进程层指标按进程聚合的读写量与 IO 等待占比
常见来源日志刷盘、批量任务、数据库刷脏页
排除项先确认磁盘空间是否正常

典型使用场景

  • 业务反馈变慢但处理器使用率不高
  • 数据库提交延迟升高,需要确认是否存储瓶颈
  • 批量任务运行时在线业务受影响,需要错峰
  • 磁盘健康告警后性能下降,需要评估是否更换
  • 容量规划时评估存储能否支撑预期写入量

磁盘层

磁盘层
iostat -x 1 5                              # 利用率、平均等待与队列
df -h                                      # 先排除空间不足带来的异常
smartctl -H /dev/sda 2>/dev/null || true    # 顺带查看介质健康
lsblk -o NAME,SIZE,ROTA,MOUNTPOINT          # 区分机械盘与固态盘
dmesg -T | grep -iE 'I/O error' | tail -5    # 排除底层报错

进程层

进程层
iotop -oPa 2>/dev/null || echo '未安装 iotop'
pidstat -d 1 5 2>/dev/null                 # 按进程查看读写
# 定位后核对三件事:
# 1) 日志级别与刷盘策略是否合理
# 2) 批量任务时间窗是否与业务高峰重叠
# 3) 缓存与预读参数是否需要调整

指标与判断

指标含义判断
利用率长期高位设备几乎无空闲结合等待时间判断是否真瓶颈
平均等待上升请求排队明显定位到具体进程与业务
写入量突增批量任务或日志刷盘错峰或调整刷盘策略
读写比例变化业务模式变化核对新上线功能
伴随底层报错介质或链路异常按磁盘告警流程处理
整体盘阵列与固态盘的性能特征差异明显,单看某一块盘的绝对值容易误判;在阵列或分布式存储上做结论时,要结合整体指标判断。

易错点

  • 只看利用率不看等待时间,把正常的顺序写误判为瓶颈,优化方向偏离
  • 写盘大户多数情况下是日志:不调理日志级别与轮转,只做容量扩容,成本高且不解决问题
  • 在阵列或分布式存储上按单盘指标下结论,忽略整体后端负载
  • 发现 IO 高就立即重启服务,业务高峰期的重启会引入额外的数据恢复与校验开销

数据来源与参考

  • man 1 iostat
  • man 8 iotop
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌