Linux高负载如何排查_核心逻辑讲解助你快速掌握【教程】

3次阅读

linux高负载排查核心是识别系统等待的资源类型而非单纯看CPU占用;Load Average反映就绪态与D状态任务平均数量,需结合vmstat、iostat、free交叉分析,再据wa/us/sy等指标定位I/O、CPU或内存瓶颈。

Linux高负载如何排查_核心逻辑讲解助你快速掌握【教程】

Linux高负载排查,核心不是“看哪个进程CPU高”,而是先搞清:系统到底在等什么。

看懂Load Average的真正含义

Load Average(1/5/15分钟)反映的是**就绪态+不可中断态(D状态)任务的平均数量**,本质是“排队等资源的活儿有多少”。它不等于CPU使用率,也不只和CPU有关——内存不足触发swap、磁盘慢导致I/O卡住、大量进程阻塞在锁或网络上,都会推高load。

关键判断标准:

  • load nproc返回值)→ 通常健康
  • load > CPU逻辑核数 → 已出现资源争抢,需进一步定位瓶颈类型
  • 1分钟load远高于5/15分钟 → 突发短时压力,可能无需干预
  • 1/5/15分钟load持续接近或超过核数 → 系统长期承压,必须查根因

三步快速缩小问题范围

别一上来就top,先用三个命令交叉验证:

Linux高负载如何排查_核心逻辑讲解助你快速掌握【教程】

音记AI

音视频秒转文字,声波流式转录,让每个声音都成篇章

Linux高负载如何排查_核心逻辑讲解助你快速掌握【教程】 146

查看详情 Linux高负载如何排查_核心逻辑讲解助你快速掌握【教程】

  • vmstat 1 5:看r(运行队列长度)是否持续>核数,同时观察wa(I/O等待)、si/hi(中断)、cs(上下文切换)是否异常升高
  • iostat -x 1:重点关注%util(设备忙时占比)、await(平均I/O响应时间)、r_await/w_await。若%util接近100%且await显著升高,说明磁盘拖慢了整个队列
  • free -h && dmesg | grep -i oom:检查可用内存(avail Mem)是否过低,以及内核是否已触发OOM Killer杀进程

区分CPU忙 vs CPU闲着等

top里%Cpu(s)行是破题钥匙:

  • us + sy 高(>80%),wa很低 → 真正的CPU计算瓶颈,找高%CPU进程(ps -eo pid,cmd,%cpu –sort=-%cpu | head
  • wa高(>20%),us/sy很低 → CPU空转等I/O,此时top里常看到大量D状态进程,重点查磁盘和存储
  • sy异常高(>30%) → 内核态耗时多,可能是频繁系统调用、锁竞争、或驱动问题
  • si高(>15%) → 软中断密集,常见于高吞吐网络或定时器任务

针对性深挖常见场景

确认方向后,用对应工具收口:

  • java服务CPU高:用pidstat -t -p PID 1找高耗线程,再jstack PID | grep ‘0x[0-9a-f]’ -A 5(十六进制线程ID)定位
  • 大量D状态进程ps aux | awk ‘$8 ~ /D/ {print}’,结合lsof -p PID看它卡在哪个文件或设备上
  • 内存型假性高负载:buff/cache虽高但可回收,真正危险信号是avail Mem持续低于100MB或swap used持续增长
  • 网络连接堆积:用ss -s看total established、orphan数量;ss -tn state time-wait | wc -l看TIME_WAIT是否异常

基本上就这些。抓准load的本质是“排队长度”,再配合vmstat/iostat/free三板斧定性,后面全是顺藤摸瓜的事。

text=ZqhQzanResources