I
Member
一台线上服务器 load average 长期在 20 以上,但 top 里 CPU idle 还有 60%,业务也没明显变慢。很多人第一反应是看 CPU,其实这时候该看 D 状态进程。先确认 load 的构成:load 统计的是可运行进程加不可中断睡眠(D 状态)进程。用 ps aux 看有没有大量 D 状态进程,有的话 load 高和 CPU 没关系,是 IO 在拖。再定位 IO 瓶颈:iostat -x 看 await 和 %util,await 几十毫秒以上、%util 接近 100%,盘基本就是瓶颈。我们那次是 SSD 的写入放大导致延迟抖动,换盘之前先用 iostat 确认了是盘的问题不是文件系统的问题。然后看是不是内存引起的连锁反应:swap 一旦开始抖动,IO 等待会跟着涨。free 和 vmstat 一起看,si/so 持续大于 0 就要查内存水位,别只盯着 load 数字。最后看文件系统和应用侧:某个进程频繁 fsync、日志写得太碎,都会制造大量 D 状态。iotop 抓到写盘大户,日志改成批量刷盘,load 当天就从 20 掉到 3。一个提醒:load 高不等于 CPU 瓶颈,先分清是 R 状态还是 D 状态,再决定往哪个方向查。大家遇到过 load 虚高的情况吗?最后查出来是什么在拖?