linux高负载需综合分析load average、CPU、内存、IO和进程,重点排查load持续超CPU核数、CPU高但idle高(IO等待)、%wa升高、单进程/线程霸占CPU、java/python/数据库进程异常及ksoftirqd/kswapd0异常等场景。

Linux高负载排查不是看一个指标就下结论,关键得看 load average、CPU、内存、IO、进程 这几块有没有“卡点”,再结合时间线和业务特征交叉验证。下面这些是真实运维中最高频的几类场景,照着查,基本能快速定位问题根因。
一看 load average 是否持续高于 CPU 核数
执行 uptime 或 cat /proc/loadavg,重点看 1/5/15 分钟三个值。如果 15 分钟 load 长期 > CPU 总核数(比如 8 核机器 load 长期在 12+),说明系统确实过载。
- load 高但 CPU idle 很高?大概率是 IO 等待(D 状态进程) 或大量不可中断睡眠导致,不是 CPU 真忙
- load 高且 %us/%sy 也高?优先查 CPU 密集型进程,用 top -Hp {pid} 看线程级热点
- load 高但 %wa 显著升高(>30%)?直接跳到 IO 排查环节
二查 CPU 使用是否被单个进程/线程霸占
运行 top,按 Shift+P 按 CPU% 降序,重点关注 %CPU 占比超 200%(多核)或长期 >80% 的进程。
- 看到 java、python、node 进程 CPU 飙高?进进程里用 jstack {pid}(Java)、py-spy record -p {pid}(Python)抓堆栈,看是不是死循环、正则回溯、GC 频繁
- 看到 mysqld、postgres CPU 高?配合 show processlist; 或 pg_stat_activity 查慢查询、锁等待
- 看到 ksoftirqd 或 kswapd0 占 CPU?可能是网络软中断不均(网卡绑定/RCU 压力)或内存严重不足触发频繁换页
三盯内存与 swap 是否拖垮系统
用 free -h 看可用内存是否持续 swpd 列非 0、si/so 持续有数值,就是内存瓶颈信号。
- cache/buffers 占用大但 free 小?先别急——Linux 会自动回收 page cache,只要没大量 swap in/out,不一定真缺内存
- 看到 pgmajfault 高(用 vmstat 1 观察)?说明进程频繁缺页,可能是内存碎片或应用分配大块内存失败后 fallback 到 slowpath
- Java 应用 RSS 持续上涨?检查 -Xmx 是否合理、是否有 native memory 泄漏(如 Netty Direct Buffer、JNA)
四摸清磁盘 IO 是不是真堵点
用 iostat -x 1 看 %util、await、r_await/w_await、svctm(已弃用,看 await 更准)、%iowait。
- %util 接近 100% 但 await 很低(
- await > 50ms 且 %util 不高?说明 IO 请求本身慢,查存储链路:云盘 IOPS/吞吐限制、本地盘坏道、RAID 卡电池失效、NFS 服务端延迟
- ps aux 发现一堆 D 状态进程?cat /proc/{pid}/stack 看卡在哪(常见:nfs_revalidate、ext4_writepages、bio_wait)
基本上就这些。高负载不是故障,是系统在“喊话”——听懂它说哪块吃紧,比盲目重启或加资源更有效。练熟这四步,90% 的线上负载问题,5 分钟内就能划出范围。