文章总结: 本文详细介绍了Linux系统出现高负载但CPU使用率低时的系统化排查方法。核心排查流程包括确认负载与CPU使用率、检查进程状态、分析vmstat指标、深入I/O与内存问题诊断。关键发现是90%此类问题源于磁盘I/O瓶颈,可通过wa指标和D状态进程快速定位。文档提供了完整的一键诊断脚本和六步排查口诀,强调vmstat的wa值和iostat工具的使用,并给出临时应急处理方案。 综合评分: 85 文章分类: 应急响应,系统运维,故障排查,解决方案,安全运营
Linux Load 高但 CPU 低的排查思路
原创
刘军军 刘军军
运维星火燎原
2026年4月12日 09:01 山西
在小说阅读器读本章
去阅读
一、排查流程图
二、详细排查步骤
第一步:确认现象(5分钟)
# 1.1 查看 Load Average
uptime
# 输出示例:load average: 12.34, 10.56, 8.78
# 1.2 查看 CPU 使用率
top -bn1 | head -10
# 重点看:%Cpu(s): 5.0 us, 3.0 sy, 0.0 ni, 85.0 id, 7.0 wa, 0.0 hi, 0.0 si, 0.0 st
# id: idle(空闲), wa: iowait(等待 I/O)
# 1.3 查看 CPU 核心数
nproc
# 或
grep -c ^processor /proc/cpuinfo
# 1.4 查看总进程数
ps aux | wc-l
判断标准:
- Load > CPU 核心数 × 2 → 负载过高
- idle > 50% → CPU 使用率低
- wa > 10% → 可能有 I/O 问题
第二步:检查进程状态(10分钟)
# 2.1 查看所有进程状态分布
echo "=== 进程状态统计 ==="
ps aux | awk'{print $8}' | sort | uniq -c | sort-rn
# 2.2 查看 D 状态进程(不可中断,通常在等 I/O)
echo ""
echo "=== D 状态进程(不可中断) ==="
ps aux | awk'$8 ~ /D/ {print $0}'
# 2.3 查看 Z 状态进程(僵尸进程)
echo ""
echo "=== Z 状态进程(僵尸) ==="
ps aux | awk'$8 ~ /Z/ {print $0}'
# 2.4 查看进程树
echo ""
echo "=== 进程树(前 50 行) ==="
pstree -p | head -50
# 2.5 查看占用资源最多的进程
echo ""
echo "=== 按 CPU 排序前 10 ==="
ps aux --sort=-%cpu | head -11
echo ""
echo "=== 按内存排序前 10 ==="
ps aux --sort=-%mem | head -11
关键看:
- D 状态进程多 → I/O 阻塞
- Z 状态进程多 → 僵尸进程堆积
- 没有明显高 CPU 进程 → 不是 CPU 问题
第三步:检查 vmstat(关键!10分钟)
# 3.1 查看 vmstat(每 1 秒刷新,共 5 次)
echo "=== vmstat 统计 ==="
vmstat 15
vmstat 输出详解:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 8 0 102400 8192 512000 0 0 0 10000 100 50 5 3 75 17 0
| 列 | 说明 | 告警值 |
| — | — | — |
| r | 运行队列中的进程数 | > CPU 核心数 |
| b | 等待 I/O 的进程数 | > 2 |
| wa | CPU 等待 I/O 时间百分比 | > 10% |
| si | swap in(从磁盘读入内存) | > 0(持续) |
| so | swap out(从内存写入磁盘) | > 0(持续) |
判断:
wa高 +b高 → 磁盘 I/O 瓶颈(最常见)si/so持续 > 0 → 内存不足,频繁 swap
第四步:深入分析 I/O 瓶颈(15分钟)
如果第三步发现 wa 高,继续排查:
# 4.1 查看磁盘 I/O 详细统计(需要安装 sysstat)
echo "=== iostat 磁盘 I/O 统计 ==="
iostat -x13
# 4.2 查看哪个进程在读写磁盘(需要安装 iotop)
echo ""
echo "=== iotop 进程 I/O(按 q 退出) ==="
ps aux --sort=-%mem | head -11
# 4.3 查看进程 I/O 统计(需要安装 sysstat)
echo ""
echo "=== pidstat 进程 I/O ==="
pidstat -d13
# 4.4 查看磁盘挂载和使用
echo ""
echo "=== df -h 磁盘使用 ==="
df -h
echo ""
echo "=== lsblk 磁盘布局 ==="
lsblk
# 4.5 查看磁盘错误
echo ""
echo "=== dmesg 磁盘错误 ==="
dmesg | grep-i error | grep-i sd
iostat 关键指标:
| 指标 | 说明 | 告警值 |
| — | — | — |
| %util | 设备繁忙时间百分比 | > 80% |
| await | 平均 I/O 等待时间(毫秒) | > 50ms |
| svctm | 平均服务时间(毫秒) | > 20ms |
常见 I/O 瓶颈原因:
- 大量日志写入(应用日志、Nginx 日志等)
- 数据库慢查询(MySQL、PostgreSQL 等)
- 备份任务正在运行
- 磁盘性能差(机械盘 vs SSD)
- 磁盘故障或损坏
第五步:检查内存和 Swap(10分钟)
如果第三步发现 si/so 高,继续排查:
# 5.1 查看内存详细使用
echo "=== free -h 内存使用 ==="
free -h
# 5.2 查看 /proc/meminfo
echo ""
echo "=== /proc/meminfo(前 20 行) ==="
cat /proc/meminfo | head -20
# 5.3 查看占用内存最多的进程
echo ""
echo "=== 按内存排序前 15 ==="
ps aux --sort=-%mem | head -16
# 5.4 查看 OOM Killer 日志
echo ""
echo "=== OOM Killer 日志 ==="
dmesg | grep-i oom
# 或
journalctl -k | grep-i oom
# 5.5 查看进程的内存映射
# echo ""
# echo "=== 进程内存映射(选一个 PID) ==="
# cat /proc/<PID>/smaps | head -30
内存问题判断:
- free 很小,buffer/cache 也小 → 真的内存不足
- swap used 持续增长 → 内存压力大
- 某个进程 %MEM 特别高 → 内存泄漏
第六步:检查其他可能原因(10分钟)
如果以上都没找到问题,检查:
# 6.1 检查网络
echo "=== 网络连接统计 ==="
ss -s
echo ""
echo "=== 网络接口流量(按 q 退出) ==="
ip -s link
# 6.2 检查 NFS 挂载(如果有)
echo ""
echo "=== NFS 挂载 ==="
mount | grep nfs
# 6.3 检查系统日志
echo ""
echo "=== 最近 50 条系统日志 ==="
journalctl -n50--no-pager
# 6.4 检查僵尸进程的父进程
echo ""
echo "=== 查找僵尸进程的父进程 ==="
ps -efL | grep-i defunct
# 6.5 检查内核参数
echo ""
echo "=== 内核参数(部分) ==="
sysctl vm.dirty_ratio vm.dirty_background_ratio vm.swappiness
三、快速排查命令清单
一键诊断(复制粘贴运行)
cat << 'EOF' > /tmp/diagnose.sh
#!/bin/bash
echo "=========================================="
echo " Linux Load 高 CPU 低 快速诊断"
echo "=========================================="
echo ""
echo "[1] Load Average 和 CPU 核心数"
echo "--------------------------------"
uptime
echo "CPU 核心数: $(nproc)"
echo ""
echo "[2] CPU 使用率"
echo "--------------------------------"
top -bn1 | head -5
echo ""
echo "[3] 进程状态统计"
echo "--------------------------------"
ps aux | awk'{print $8}' | sort | uniq -c | sort-rn | head -10
echo ""
echo "[4] D 状态进程(不可中断)"
echo "--------------------------------"
d_count=$(ps aux | awk '$8 ~ /D/ {count++} END{print count+0}')
echo "D 状态进程数: $d_count"
if [ $d_count-gt0 ]; then
ps aux | awk'$8 ~ /D/ {print $0}' | head -5
fi
echo ""
echo "[5] VMSTAT"
echo "--------------------------------"
if command -v vmstat &>/dev/null; then
vmstat 12 | tail -1
else
echo "vmstat 未安装"
fi
echo ""
echo "[6] 内存使用"
echo "--------------------------------"
free -h
echo ""
echo "[7] 磁盘使用"
echo "--------------------------------"
df -h | grep-v tmpfs
echo ""
echo "=========================================="
echo "诊断完成"
echo "=========================================="
echo ""
echo "提示:"
echo "- 如果 wa > 10%,检查磁盘 I/O"
echo "- 如果有 D 状态进程,检查 I/O 阻塞"
echo "- 如果 si/so > 0,检查内存"
EOF
chmod +x /tmp/diagnose.sh /tmp/diagnose.sh
四、常见场景总结
| 场景 | Load | CPU idle | wa | b | si/so | 原因 | | — | — | — | — | — | — | — | | 场景 1 | 高 | 高 | 高 | 高 | 低 | 磁盘 I/O 瓶颈(最常见) | | 场景 2 | 高 | 高 | 低 | 低 | 高 | 内存不足,swap 频繁 | | 场景 3 | 高 | 高 | 低 | 高 | 低 | 大量 D 状态进程(NFS/驱动) | | 场景 4 | 高 | 高 | 低 | 低 | 低 | 僵尸进程堆积 | | 场景 5 | 高 | 高 | 低 | 低 | 低 | 网络 I/O 瓶颈 |
五、应急处理(临时方案)
如果需要快速恢复服务:
# 1. 如果是 I/O 瓶颈,尝试降低 I/O 优先级
# ionice -c 3 -p <PID>
# 2. 如果是内存问题,先清理缓存(小心!)
# sync; echo 3 > /proc/sys/vm/drop_caches
# 3. 重启有问题的服务
# systemctl restart <service>
# 4. 临时扩容(如果是云服务器)
# 增加 CPU/内存
六、总结
排查口诀
Load 高 CPU 低,先看 vmstat 的 wa;
wa 高是 I/O 卡,iostat 把磁盘查;
wa 低看 si/so,内存不足 swap 跑;
还有 D 状态多,不是 I/O 就是锁;
按步排查别着急,问题总能找到底!
关键命令速查
| 步骤 | 命令 |
| — | — |
| 看 Load | uptime |
| 看 CPU | top |
| 看进程 | ps aux、ps aux --sort=-%mem |
| 看 I/O | vmstat 1、iostat -x 1、iotop |
| 看内存 | free -h |
| 看网络 | ss -s、ip -s link |
Load 高 CPU 低,90% 是磁盘 I/O 问题!先用 vmstat 1 看 wa 和 b,再用 iostat 和 iotop 深入分析!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:运维星火燎原 刘军军 刘军军《Linux Load 高但 CPU 低的排查思路》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论