故障排查实战手册:运维高手的“破局”指南
故障排查实战手册:运维高手的“破局”指南
在IT运维的日常中,故障往往不期而至。面对告警风暴和业务方的催促,运维人员如果仅凭直觉“盲猜”,极易陷入反复试错的泥潭。真正的排查高手,依靠的是结构化的思维与精准的工具链。本文按四大高频故障场景,梳理出一套可落地的实战排查手册,助你从“救火队员”蜕变为“排障专家”。
场景一:CPU利用率飙升
排查思路:
当收到CPU告警,首要任务是确认是“全局性”还是“局部性”问题,随后定位到具体进程,再下钻至线程级别,最后结合代码日志找出根因。
核心命令:
- 全局视角:
top(观察Load Average与CPU占用率,注意1分钟、5分钟、15分钟的趋势对比) - 进程定位:
top模式下按P键按CPU排序,或使用ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -10 - 线程下钻:
top -Hp(查看目标进程内哪个线程CPU最高) - 线程ID转换:
printf "%x\n"(将十进制线程ID转为十六进制) - 堆栈分析:
jstack(Java应用常用,查看该线程正在执行的代码栈)| grep -A 30 - 系统级深度分析:
- vmstat 1 5:观察 r(运行队列)和 cs(上下文切换),若cs极高,需警惕锁竞争或线程过多。
- perf top -g:实时分析CPU在哪些函数上消耗最多,C/C++应用排障利器。
场景二:内存溢出(OOM)/持续增长
排查思路:
内存问题通常分为进程内泄漏和系统级耗尽。需先确认是哪个进程“吞噬”了内存,再区分是堆内存还是非堆/堆外内存泄漏。
核心命令:
- 系统内存概览:
free -h(重点关注used和available,而非传统的buff/cache) - 进程级定位:
top按M键按内存排序,或ps -eo pid,cmd,%mem --sort=-%mem | head -10 - 系统级内存去向:
vmstat 1 5(观察si/so,若持续大于0,说明物理内存不足,系统在频繁换页) - 幽灵内存排查:
lsof -n | grep deleted
实战技巧:有时 free 显示内存极少,但 top 中各进程RES之和远小于总内存。这通常是因为有进程写入了大文件后被删除,但进程未释放句柄。通过此命令找出并重启对应进程即可释放。
- Java堆外内存/堆内存分析:
- jmap -heap :查看JVM堆内存分布。
- jmap -histo:live :查看存活对象数量,定位泄漏类。
- pmap -x :查看进程虚拟内存映射,排查堆外内存分配。
场景三:磁盘空间/I/O瓶颈
排查思路:
磁盘问题分为“空间满”和“I/O阻塞”两类。空间满会导致服务无法写入数据;I/O阻塞会导致应用响应极慢,但CPU可能并不高。
核心命令:
- 空间使用率:
df -hT(-T显示文件系统类型,注意排查是否有分区未挂载导致写入到了根目录) - 大文件定位:
du -h --max-depth=1 / | sort -hr | head -10(逐级下钻找出大目录) - I/O性能评估:
iostat -xz 1 5
- %util:接近100%说明设备带宽已饱和。
- await:平均I/O等待时间,一般应低于10ms,过高说明磁盘存在严重瓶颈。
- svctm:平均服务时间,若远小于 await,说明I/O请求在队列中等待时间过长。
- I/O进程定位:
iotop -oP(仅显示有I/O操作的进程,按磁盘读写排序) - 系统级阻塞观察:
vmstat 1 5(观察b列,即处于不可中断睡眠状态的进程数,b持续大于0说明存在I/O阻塞)
场景四:网络连通性异常
排查思路:
网络故障排查遵循“自底向上”原则:物理层/链路层 -> 网络层(IP/路由) -> 传输层(端口/防火墙) -> 应用层(服务状态)。
核心命令:
- 本机网络配置:
ip a或ifconfig(检查网卡状态、IP是否冲突) - 链路连通性:
ping(ICMP通不通),traceroute(卡在哪一跳) - 端口/TCP状态排查:
- telnet 或 nc -vz (探测远端端口是否可达)
- ss -antp | grep (比netstat更高效,观察LISTEN与ESTABLISHED状态)
- netstat -s | grep -i drop(查看内核层面是否有丢包,如TCP全连接队列溢出)
- 防火墙/路由拦截:
- iptables -L -n 或 firewall-cmd --list-all(检查安全规则是否拦截)
- ip route get <目标IP>(验证路由走向是否正确)
- 终极杀器:抓包分析
- tcpdump -i eth0 -nn port 80 -w capture.pcap
实战技巧:当应用层报错含糊不清时,抓包是唯一真相。通过Wireshark分析pcap文件,看TCP三次握手是否完成,是否有RST重置、FIN提前终止,或者应用层HTTP返回了什么异常状态码。
结语:排障心法
工具与命令只是武器,真正的核心在于排障心法:
- 先止血,后治病:遇到故障先考虑快速恢复(如重启、回滚、限流),降低业务影响,再静心排查根因。
- 变更即原罪:80%的故障由变更引发。排查第一步永远是问:“最近有什么变更?”
- 控制变量:排查时一次只改一个条件,避免多重操作导致现象失真。
- 留存现场:重启前,务必保留dump文件、核心日志和现场截图,否则重启后“死无对证”。
将这套实战手册融入日常,形成肌肉记忆,你将在故障面前从容不迫,一击必中。