故障排查实战手册:运维高手的“破局”指南

在IT运维的日常中,故障往往不期而至。面对告警风暴和业务方的催促,运维人员如果仅凭直觉“盲猜”,极易陷入反复试错的泥潭。真正的排查高手,依靠的是结构化的思维与精准的工具链。本文按四大高频故障场景,梳理出一套可落地的实战排查手册,助你从“救火队员”蜕变为“排障专家”。


场景一:CPU利用率飙升

排查思路

当收到CPU告警,首要任务是确认是“全局性”还是“局部性”问题,随后定位到具体进程,再下钻至线程级别,最后结合代码日志找出根因。

核心命令

  1. 全局视角top(观察Load Average与CPU占用率,注意1分钟、5分钟、15分钟的趋势对比)
  2. 进程定位top模式下按 P 键按CPU排序,或使用 ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -10
  3. 线程下钻top -Hp (查看目标进程内哪个线程CPU最高)
  4. 线程ID转换printf "%x\n" (将十进制线程ID转为十六进制)
  5. 堆栈分析jstack | grep -A 30(Java应用常用,查看该线程正在执行的代码栈)
  6. 系统级深度分析

- vmstat 1 5:观察 r(运行队列)和 cs(上下文切换),若cs极高,需警惕锁竞争或线程过多。

- perf top -g:实时分析CPU在哪些函数上消耗最多,C/C++应用排障利器。


场景二:内存溢出(OOM)/持续增长

排查思路

内存问题通常分为进程内泄漏和系统级耗尽。需先确认是哪个进程“吞噬”了内存,再区分是堆内存还是非堆/堆外内存泄漏。

核心命令

  1. 系统内存概览free -h(重点关注 usedavailable,而非传统的 buff/cache
  2. 进程级定位topM 键按内存排序,或 ps -eo pid,cmd,%mem --sort=-%mem | head -10
  3. 系统级内存去向vmstat 1 5(观察 si/so,若持续大于0,说明物理内存不足,系统在频繁换页)
  4. 幽灵内存排查lsof -n | grep deleted

实战技巧:有时 free 显示内存极少,但 top 中各进程RES之和远小于总内存。这通常是因为有进程写入了大文件后被删除,但进程未释放句柄。通过此命令找出并重启对应进程即可释放。

  1. Java堆外内存/堆内存分析

- jmap -heap :查看JVM堆内存分布。

- jmap -histo:live | head -20:查看存活对象数量,定位泄漏类。

- pmap -x | sort -n -k3:查看进程虚拟内存映射,排查堆外内存分配。


场景三:磁盘空间/I/O瓶颈

排查思路

磁盘问题分为“空间满”和“I/O阻塞”两类。空间满会导致服务无法写入数据;I/O阻塞会导致应用响应极慢,但CPU可能并不高。

核心命令

  1. 空间使用率df -hT-T 显示文件系统类型,注意排查是否有分区未挂载导致写入到了根目录)
  2. 大文件定位du -h --max-depth=1 / | sort -hr | head -10(逐级下钻找出大目录)
  3. I/O性能评估iostat -xz 1 5

- %util:接近100%说明设备带宽已饱和。

- await:平均I/O等待时间,一般应低于10ms,过高说明磁盘存在严重瓶颈。

- svctm:平均服务时间,若远小于 await,说明I/O请求在队列中等待时间过长。

  1. I/O进程定位iotop -oP(仅显示有I/O操作的进程,按磁盘读写排序)
  2. 系统级阻塞观察vmstat 1 5(观察 b 列,即处于不可中断睡眠状态的进程数,b 持续大于0说明存在I/O阻塞)

场景四:网络连通性异常

排查思路

网络故障排查遵循“自底向上”原则:物理层/链路层 -> 网络层(IP/路由) -> 传输层(端口/防火墙) -> 应用层(服务状态)。

核心命令

  1. 本机网络配置ip aifconfig(检查网卡状态、IP是否冲突)
  2. 链路连通性ping (ICMP通不通),traceroute (卡在哪一跳)
  3. 端口/TCP状态排查

- telnet nc -vz (探测远端端口是否可达)

- ss -antp | grep (比netstat更高效,观察LISTEN与ESTABLISHED状态)

- netstat -s | grep -i drop(查看内核层面是否有丢包,如TCP全连接队列溢出)

  1. 防火墙/路由拦截

- iptables -L -nfirewall-cmd --list-all(检查安全规则是否拦截)

- ip route get <目标IP>(验证路由走向是否正确)

  1. 终极杀器:抓包分析

- tcpdump -i eth0 -nn port 80 -w capture.pcap

实战技巧:当应用层报错含糊不清时,抓包是唯一真相。通过Wireshark分析pcap文件,看TCP三次握手是否完成,是否有RST重置、FIN提前终止,或者应用层HTTP返回了什么异常状态码。


结语:排障心法

工具与命令只是武器,真正的核心在于排障心法

  1. 先止血,后治病:遇到故障先考虑快速恢复(如重启、回滚、限流),降低业务影响,再静心排查根因。
  2. 变更即原罪:80%的故障由变更引发。排查第一步永远是问:“最近有什么变更?”
  3. 控制变量:排查时一次只改一个条件,避免多重操作导致现象失真。
  4. 留存现场:重启前,务必保留dump文件、核心日志和现场截图,否则重启后“死无对证”。

将这套实战手册融入日常,形成肌肉记忆,你将在故障面前从容不迫,一击必中。