Linux高负载如何排查_高频场景实战指导更易上手【教程】

7次阅读

Linux 高负载时应先看 load average、CPU 使用率、IO 等待时间三指标;load average 表示运行态或不可中断睡眠态进程平均数,非 CPU 百分比;load 高而 CPU 低且 iowait%>20% 表明 IO 瓶颈;内存不足会引发 swap 和 page cache 回收,导致高 load 与 sy% 飙升。

Linux 高负载如何排查_高频场景实战指导更易上手【教程】

Linux 高负载时,第一反应不是重启服务,而是快速定位“谁在吃 CPU、内存或 IO”。关键看三个指标:load average(系统平均负载)、CPU 使用率IO 等待时间。三者不一致时,往往能直接锁定问题类型。

看懂 load average 的真实含义

执行 uptimetop,看到类似 load average: 12.45, 11.88, 10.23 —— 这不是 CPU 使用率百分比,而是 ** 过去 1 /5/15 分钟内,处于运行态或不可中断睡眠态(如磁盘 IO)的平均进程数 **。重点对比:如果 CPU 核心数是 8,load 长期 > 8,说明有进程排队;若 load 高但 CPU 使用率很低(

  • ps aux | awk '$8 ~ /D/ {print}' 快速找 D 状态进程
  • cat /proc/loadavg 查看更细粒度:第 4 字段是当前运行队列长度,第 5 字段是总进程数

揪出 CPU 消耗大户

top 默认按 CPU 排序,但容易漏掉短时爆发型进程。建议组合使用:

  • top -Hp [PID] 查看某进程的各线程占用(尤其 Java 应用常见单线程打满)
  • pidstat -u 1 3 每秒采样 3 次,精准捕捉波动峰值
  • 对 Java 进程,用 jstack [PID] > jstack.log 结合 top -Hp 找到高 CPU 线程 ID,转为十六进制后在 jstack 日志里搜 nid=0x…… 定位具体方法

识别隐形 IO 卡顿元凶

当 load 高、CPU 低、iowait%top 第三行右数第二项)持续 >20%,说明磁盘慢或进程卡在 IO。别只盯 iotop——它显示的是“当前正在读写”的进程,而真正拖慢系统的可能是大量 同步写等待(比如日志刷盘、数据库 fsync)。

  • iostat -x 1 关注 %util(设备忙时百分比)和 await(IO 平均响应时间,>10ms 要警惕,>50ms 通常已严重)
  • /proc/[PID]/io 看某进程累计读写 字节 数和 syscalls 次数,判断是否频繁小 IO
  • 检查磁盘健康:smartctl -a /dev/sda,关注 Reallocated_Sector_Ct、Pending_Sector 等字段

内存不足引发的连锁假象

内存吃紧时,系统会频繁 swap 和回收 page cache,导致大量 IO 和上下文切换,表现常为 load 高 + CPU sy%(系统态)飙升 + kswapd0 进程活跃。此时 free -h 可能显示“available”不足,但 buff/cache 很高——别急着 kill 进程,先看是否被 page cache 占用(可安全释放)。

  • echo 1 > /proc/sys/vm/drop_caches(仅临时测试,生产慎用)验证 cache 是否真成瓶颈
  • slabtop 查看内核 slab 分配,dmesg -T | grep -i "out of memory" 确认是否 OOM Killer 已介入
  • 对容器环境,检查 cgroups 内存限制:cat /sys/fs/cgroup/memory/……/memory.usage_in_bytes

基本上就这些。高负载排查不是拼命令数量,而是建立“load → CPU/IO/MEM → 进程 / 线程 / 内核态”的归因链条。每次动手前,先花 30 秒看全 top 屏幕,比盲目杀进程有效得多。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-28发表,共计1430字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources