一次 Linux 服务器负载飙高的排查顺序
深夜监控告警:一台跑 Web 服务和定时任务的 Linux 服务器 load average 冲到 28,SSH 卡顿,页面响应变慢。下面是我实际走的排查顺序:先看是真忙还是在等,先定位瓶颈,再动进程。
第一步:uptime 看 load 与核数关系。执行 uptime 和 nproc,看 1、5、15 分钟 load。load 是排队等 CPU 的进程数,必须结合核数判断:8 核机器 load 8 只是跑满,load 28 是严重排队;1 核机器 load 2 已很吃力。
第二步:top 区分 CPU 还是在等 IO。看 %Cpu(s) 一行:us 高是用户进程真在算,sy 高看系统调用或锁,wa 高说明大量进程在等磁盘 IO,id 近 0 说明 CPU 已无空闲。按 1 看单核:若某一核跑满、其余空闲,可能是单线程或绑核问题。
第三步:vmstat 看 r/b 列与 si/so。执行 vmstat 1 5:r 是等 CPU 的进程数,长期大于核数即 CPU 排队;b 是不可中断睡眠进程数,持续大于 0 多是磁盘或网络 IO 在拖后腿。so 持续大于 0 说明内存不足已换页。
第四步:iostat 看磁盘 util。执行 iostat -x 1 3,重点看 %util 和 await:%util 近 100% 说明磁盘饱和,await 大说明单次 IO 很慢。再看 r/s、w/s,区分读多还是写多,配合 iotop 找写盘最凶的进程。
第五步:D 状态与僵尸进程。用 ps aux 看 STAT:D 状态是不可中断睡眠,多在等磁盘或 NFS,kill -9 也杀不掉,只能等 IO 恢复或处理底层存储;Z 是僵尸进程,本身不占 CPU 和内存,但父进程不回收会越积越多,应让父进程回收或重启父进程。
排查清单:1. uptime + nproc,判断 load 是否超核数;2. top 看 us/sy/wa/id,按 1 看单核,锁定嫌疑进程;3. vmstat 1 5 看 r/b、si/so,区分 CPU 排队、IO 等待和内存换页;4. iostat -x 看 %util、await,iotop 定位读写凶手;5. ps aux 处理 D 状态和僵尸进程。按此顺序走一遍,多数负载飙高十几分钟内能定位原因。
- 点赞
- 收藏
- 关注作者
评论(0)