## 症状现象
服务器硬盘灯常亮不灭,系统响应变钝,但登录查目录却找不到新出现的大文件,磁盘剩余空间也正常。IO 在发生但看不见文件增长的表象,常让人怀疑判断失误。其实文件大小与 IO 活动本来就是两个维度,常亮的灯要用 IO 工具去看,而不是用文件管理器去找。
## 定位过程
两个工具各看一层:iostat 从设备视角给出每块盘的繁忙度、请求队列与等待时间,确认 IO 压力落在哪块盘、是读还是写;iotop 从进程视角列出谁在发起 IO,每进程的读写速率一目了然。先 iostat 找盘,再 iotop 找人,两步锁定源头。
iostat -x 1 5 iotop -o -P -d 2
两个典型源头值得先排查:突发写常见于日志失控与备份任务,某类日志没有轮转,单文件几百 GB,文件早就存在所以看不出新增;持续读常见于数据库缺索引导致的全表扫描,数据量没变但读取量暴涨。iotop 看到具体进程后,按这两类假设顺藤摸瓜。
## 解决方法
日志失控就立即补轮转策略并清档,清档用截断而不是直接删,避免持有句柄的进程继续写已删文件占住空间。备份任务错峰与限速。数据库类读放大交给慢查询日志定位语句,补索引或改写法。处置后回到 iostat 确认繁忙度回落。
## 预防建议
把设备级繁忙度与等待时间纳入监控告警,常态基线之上持续高位即通知,不等业务变钝才发现。顺云云服务器数据盘与系统盘分开,盘间压力互相隔离,定位时先分清是哪块盘在响。
复盘这类场景的方法值得记下:磁盘灯是设备层的信号,目录大小是文件层的视角,两层信号不同源,用文件层工具追设备层现象必然扑空。正确的路径是先设备后进程再文件:确认哪块盘、找到哪个进程、再看进程在动哪些文件。这套顺序适用于一切 IO 类问题的第一轮排查。顺带一提,iotop 需要一定权限运行,普通用户看不到全部进程的 IO。