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”等关键词