linux负载高需先结合 CPU 核心数判断是否真超标,再通过 top 查 %Cpu(s)、r/ b 值及进程排序定位瓶颈类型,最后用 perf、iostat、free 等 工具 深入分析根因。

linux 系统 负载高,不能只盯着 load average 数字猛看。关键要分清:是 CPU 真忙?还是进程在等磁盘或网络?又或者内存吃紧导致频繁换页?排查得有顺序、有重点、有依据。
先确认负载是否真超标
别一看到 load 5 就慌。得结合 CPU 核心数判断:
- 运行
nproc或grep -c 'processor' /proc/cpuinfo查清当前有多少逻辑 CPU - 用
uptime或cat /proc/loadavg看三个值(1/5/15 分钟) - 如果 1 分钟负载 ÷ CPU 核数 > 1,说明当前队列已积压;> 0.7 就该关注了
快速定位瓶颈类型
打开 top,第一眼盯三处:
- 右上角
%Cpu(s)行:看us(用户态)和sy(内核态)是否持续高于 70%;若wa(IO wait)> 20%,大概率是磁盘卡住 - 中间
r和b列(按1键可展开):r值长期大于 CPU 核数 → CPU 队列满;b> 0 → 有进程在不可中断睡眠(常因 IO) - 进程列表:按
P按 CPU 排序,按M按内存排序,一眼揪出“带头大哥”
按方向深入查具体原因
根据上一步线索,选对应命令深挖:
- CPU 高但 wa 很低 :用
perf top -p PID或strace -p PID看进程到底在执行什么系统调用或 热点 函数 - wa 高或 b 值不为 0:跑
iostat -x 1 5看%util和await;再用iotop找出真正刷盘的进程 - 内存紧张迹象:
free -h看available是否极少;cat /proc/meminfo | grep -E "Swap|Oom"看是否在疯狂换页或触发 OOM - 网络相关负载:
ss -s看连接总数和状态分布;netstat -s | grep -i "retransmit|drop"查重传或丢包异常
java 类应用特别提醒
如果高负载进程是 Java 应用,别只停在 top 层面:
- 用
top -Hp PID找出最耗 CPU 的 线程 ID(TID) - 转成十六进制:
printf "%xn" TID - 用
jstack PID | grep -A10 HEX_TID定位线程 堆栈 ,看是不是死 循环、锁竞争或 Full GC 频繁 - 辅以
jstat -gcutil PID 1000观察 GC 频率和耗时
基本上就这些。顺序别乱:看负载 → 看 top 总体指标 → 分方向查 → 锁定进程 → 深挖根因。不复杂但容易忽略的是——别跳过 CPU 核数这个分母,也别把 load 高直接等同于 CPU 高。