Linux系统负载异常排查教程_load过高问题分析

4次阅读

Linux 负载高不等于 CPU 高,需结合运行队列、I/ O 等待和 D 状态进程综合判断;load 值反映单位时间运行或不可中断睡眠态进程均值,>逻辑核数即存在争用,长期> 2 倍需立即排查;D 状态进程是常见主因,可用 ps、/proc/PID/stack 定位;I/ O 瓶颈看 iostat - x 的 await、%util 与 avgqu-sz;还需排查内存不足、内核 bug 及 cgroup 限制。

Linux 系统负载异常排查教程_load 过高问题分析

Linux 系统负载过高,不等于 CPU 使用率高,需从 运行队列 I/ O 等待 不可中断状态进程 三方面综合判断。直接看 tophtop里的 %CPU 容易误判,关键要看 uptimecat /proc/loadavg输出的三个数字(1/5/15 分钟平均负载),再结合 vmstatiostatps工具 定位根因。

看懂 load 值到底代表什么

Load 值反映的是单位时间内处于 运行态 不可中断睡眠态(D 状态)的平均进程数。比如单核 CPU 上 load=3,意味着平均有 3 个进程在争抢 CPU 或等待磁盘 I /O,其中 2 个大概率在排队。注意:load 高 ≠ CPU 满,可能是大量进程卡在磁盘读写、NFS 挂载、锁竞争或内核态等待中。

  • load 值 > CPU 逻辑核数,说明系统存在资源争用
  • load 长期高于 CPU 核心数×2,需立即排查
  • 对比 uptimempstat -P ALL 1,若 CPU 空闲率高但 load 飙升,基本可排除纯 CPU 瓶颈

快速定位 D 状态进程(最常见诱因)

D 状态进程无法被信号中断,通常卡在内核 I / O 路径(如坏盘、NFS 超时、RAID 重建、cgroup 限制、ext4 journal 阻塞)。它们不消耗 CPU,却持续计入 load,是 load 虚高主因。

  • 执行 ps aux | awk '$8 ~ /D/ {print $0}' 列出所有 D 状态进程
  • 重点检查其 WCHAN 列(内核等待函数),常见如nfsservdext4_journal_startcall_rwsem_down_read_failed
  • cat /proc//stack 查看该进程内核调用 ,确认卡在哪个驱动或子系统

检查 I / O 延迟与存储瓶颈

即使没有 D 状态进程,高 I / O 等待(%iowait)也会推高 load。但要注意:%iowait 在现代内核中统计口径有变化,不能单独依赖它;更可靠的是看 iostat -x 1 中的await(平均 I / O 响应时间)、%util(设备忙时百分比)和avgqu-sz(平均队列长度)。

  • await > 10ms(SSD)或> 50ms(HDD)表明 I / O 响应变慢
  • %util 接近 100%avgqu-sz 持续>4,说明设备已饱和
  • lsof +D /pathpidstat -d 1定位高 I / O 进程

排查其他隐蔽因素

部分场景下 load 升高与常规资源无关,需针对性验证:

  • 内存严重不足:触发直接回收或 OOM Killer 前,进程频繁进入 D 状态等待内存页释放,查free -hcat /proc/meminfo | grep -i "oom|commit"
  • 内核 bug 或驱动异常 :如某些 网卡驱动 在高包量下导致软中断堆积,用 cat /proc/interrupts 观察 CPU 间中断分布是否严重不均
  • cgroup 资源限制 :容器或 systemd 服务配置了CPUQuotaMemoryLimit,进程被节流后排队,查systemctl show | grep -i limit
星耀云
版权声明:本站原创文章,由 星耀云 2026-01-06发表,共计1352字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources