判断系统是否真过载需先用nproc查CPU核数,再结合load average三值(尤其15分钟值是否持续>核数×1.2)、top中%Cpu(s)的wa/id占比;再依us+sy高/r大→CPU问题、wa高/%util≈100%→IO瓶颈、free为0→内存不足;最后用pidstat、lsof、slabtop等定位隐蔽负载源。
看 load average 和 CPU 核心数是否真过载
别一看到 load average: 12.5, 8.3, 4.1 就慌——先执行 nproc 看实际 CPU 核数。16 核机器 load=12.5 是正常波动;但 load=50 就明显排队了。关键看 15 分钟值(第三个数)是否持续 > 核数 × 1.2,再结合 top 右上角的 %Cpu(s):如果 wa > 20% 或 id ≈ 0,基本可排除纯 CPU 问题,转向 IO。
区分是 CPU 高、IO 高还是内存压垮了系统
用 top 中三类指标快速分路:
-
us+sy高且r(运行队列)持续 > 核数 → CPU 密集型,进top -Hp [PID]找线程 -
wa高 +%util接近 100%(用iostat -xz 1验证)→ IO 瓶颈,立刻sudo iotop -o -
free -h显示availablevmstat 1 中si/so> 0 → 内存不足引发 swap,查dmesg | grep oom看有没有进程被杀
绕过 top 默认排序,直击真实“搞事进程”
很多高负载不是由单个 CPU 大户引起,而是多个小进程或内核资源争用: