Linux生产环境排查应按系统负载、CPU、内存、磁盘、网络、外部依赖顺序逐层定位:先看load average是否超CPU核数×2,再结合top、mpstat、free、iostat、iftop等工具分析具体瓶颈,最后检查日志与外部服务。

Linux生产环境出问题,别急着重启或加机器。真正有效的排查,是按顺序一层层缩小范围,从系统整体表现切入,快速锁定到底是CPU、内存、磁盘、网络,还是外部依赖拖了后腿。
看平均负载,判断系统是否真的“忙”
先执行 uptime 或 top,重点看 load average 三个值(1/5/15分钟)。它反映的是等待运行或正在运行的进程数,不是CPU使用率。
- 用 nproc 查清当前CPU逻辑核数
- 若 load average 持续 > CPU核数 × 2,说明系统已过载
- 若 load 高但 %CPU 并不高,大概率是大量进程卡在不可中断状态(D状态),常见于磁盘IO卡住或内核锁争用
查CPU瓶颈,分清“真忙”和“假忙”
top 中关注 %us(用户态)、%sy(内核态)、%wa(I/O等待) 和 %id(空闲):
- %us 高 → 应用计算密集,比如Java死循环、正则回溯、未优化算法
- %sy 高 → 系统调用频繁,可能是上下文切换多、锁竞争激烈或驱动异常
- %wa 高 → CPU在等磁盘或网络响应,此时要立刻转向IO分析
- 用 mpstat -P ALL 1 查单核是否打满,避免只看全局平均掩盖局部热点
盯内存使用,别只看free字段
运行 free -h,关键看三行:
- Mem available:真正可用内存(含可回收cache/buffer),比free更真实
- buff/cache 高不等于有问题,Linux会主动缓存文件加速IO
- Swap used > 0 且 available Mem 很低 → 内存不足,开始换页,性能明显下降
- 用 top 按 M 键排序,快速定位内存大户;再结合 ps aux --sort=-%mem | head -10 确认
验磁盘与网络,揪出隐藏IO瓶颈
磁盘瓶颈看 iostat -x 1:
- %util > 70% 表示设备持续繁忙,接近饱和
- await > 10ms(普通SATA)或 > 1ms(NVMe)说明响应延迟高
- 用 iotop -o 找出实际在读写的进程
网络瓶颈看 iftop -P 或 nload:
- 确认流量是否超网卡带宽(如千兆口跑满125MB/s)
- 用 ss -s 查看连接总数、TIME-WAIT数量是否异常堆积
- 用 netstat -i 或 cat /proc/net/dev 看接口错误包(RX-ERR/TX-ERR)是否上升
收尾:别漏掉外部依赖和日志线索
当系统指标都正常,但业务仍卡顿,就要跳出本机:
- 检查数据库连接池是否耗尽、慢查询是否激增
- 确认Redis等缓存是否雪崩或连接超时
- 翻查 /var/log/messages、dmesg -T 是否有OOM killer日志、硬件报错或内核警告
- 应用日志里搜索 “timeout”、“Connection refused”、“Too many open files” 等关键词










