Linux高负载如何排查_操作步骤详解提升实战能力【教学】

3次阅读

linux高负载需结合 CPU 核心数、IO 等待、内存压力等多维度判断:先用 uptime 和 nproc 计算负载比值,再通过 top 看 %Cpu(s)、r 列和 Mem 行定位瓶颈,接着用 ps、iostat、iotop 等命令找异常进程,最后用 strace、lsof、perf 深入追踪。

Linux 高负载如何排查_操作步骤详解提升实战能力【教学】

Linux 高负载不是单看一个数字就能下结论的事,关键得结合 CPU 核心数、进程状态、IO 等待、内存压力这些维度交叉判断。下面分四步带你实操排查,每一步都带命令和解读,照着做就能定位问题根源。

一、确认负载是否真高

先别急着杀进程,先看负载值和 CPU 核数的关系:

  • 运行 uptimecat /proc/loadavg,拿到三个值(1/5/15 分钟平均负载)
  • 运行 nprocgrep -c processor /proc/cpuinfo 查清逻辑 CPU 总数
  • 计算比值:比如负载是 6.2, 4.8, 2.1,CPU 是 4 核,那 1 分钟负载 6.2 ÷ 4 = 1.55 → 已过载;若负载是 0.8, 0.9, 1.0,哪怕看起来“有 1”,其实完全正常

二、快速判断瓶颈类型

打开 top,重点盯三块:

  • %Cpu(s) 行:看 us(用户态)高?sy(内核态)高?还是 wa(IO 等待)高?→ us 高:业务进程在狂算;→ sy 高:系统调用频繁(如大量 fork、socket 操作);→ wa 高:磁盘或网络卡住了,进程在等 IO
  • load average 值持续高于 CPU 核数,且 r 列(运行队列长度)长期 > CPU 核数,说明有任务在排队
  • Mem 行:如果 free 极低、buff/cache 占比高但 available 也低,可能内存吃紧;再查 free -havailable 是否告急

三、定位具体“搞事”的进程或 线程

根据上一步线索选择对应命令:

  • 如果是 us/sy 高 :→ ps aux –sort=-%cpu | head -10 找 CPU 大户 → top -Hp [PID] 进入线程视图,看哪个线程占 CPU 多(java 服务可配合 jstack [PID]
  • 如果是 wa 高:→ iostat -x 1 3 看 %util 和 await,%util > 90% 或 await > 10ms 说明磁盘慢 → iotop -o 直接看哪些进程在刷盘(需 root)
  • 怀疑内存压力大:→ ps aux –sort=-%mem | head -10 找内存大户 → dmesg | grep -i “killed process” 看有没有 OOM Killer 干掉过进程

四、深入追踪异常行为(进阶)

当常规命令看不出明显问题时,可以追加深度诊断:

  • 对某个可疑进程做系统调用追踪:strace -tt -T -p [PID] -o /tmp/trace.log(观察是否卡在 open/read/write/futex 等系统调用)
  • 检查该进程打开的文件句柄:lsof -p [PID] | wc -l,超限可能引发阻塞
  • 查网络连接状况:ss -s 看总连接数、TIME-WAIT 数量;ss -tnp | grep [PID] 看它建了哪些连接
  • 查内核级资源争用:perf top -p [PID](需安装 perf),看 热点 函数在哪

基本上就这些。不复杂但容易忽略的是:别只盯着 load average 数字,一定要同步看 CPU 核心数、wa 值、r 列、available 内存这四个关键信号。它们合起来,才能告诉你系统到底卡在哪一环。

站长
版权声明:本站原创文章,由 站长 2025-12-22发表,共计1334字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
1a44ec70fbfb7ca70432d56d3e5ef742
text=ZqhQzanResources