程序员如何做「故障排查」:不是靠猜,是靠方法
系统出故障是难免的,故障排查能力决定了恢复速度。
有方法的工程师 5 分钟找到根因,没方法的可能花 5 小时还在瞎试。
一、故障排查的步骤
1. 确认问题
- 什么现象?错误信息是什么?
- 影响范围多大?多少人受影响?
- 什么时候开始的?
2. 快速止血
- 能回滚就先回滚
- 能降级就先降级
- 先恢复服务,再查根因
3. 收集信息
- 日志(应用日志、系统日志)
- 监控(CPU、内存、网络、QPS)
- 链路追踪(请求从哪到哪)
- 数据库(慢查询、连接数)
4. 定位根因
- 是代码问题、配置问题、网络问题还是硬件问题?
- 用排除法逐步缩小范围
5. 修复验证
- 修复后验证问题是否解决
- 检查相关功能是否受影响
6. 复盘总结
- 为什么会出问题?
- 怎么能避免?
- 怎么加快下次排查速度?
二、常用排查命令
1. Linux 基础
# 查看进程
ps aux | grep java
# 查看端口
netstat -tlnp | grep 8080
2. 网络
ping
telnet host port
3. Java 排查
jstack <pid> # 线程堆栈
jmap -dump # 内存快照
jstat -gc # GC 情况
三、常见故障类型
1. 服务不可用
检查进程、端口、防火墙、健康检查。
2. 响应慢
看慢查询、GC、线程状态、外部依赖。
3. 内存溢出
看 dump 文件,分析对象占用。
4. CPU 高
看哪个进程、哪个线程、堆栈定位。
四、排查心态
1. 不要慌
越慌越容易出错。
2. 相信数据
日志不会说谎。
3. 小步验证
一次只改一个地方。
4. 记录过程
方便复盘和学习。
五、一句话总结
故障排查 = 确认问题 + 快速止血 + 收集信息 + 定位根因 + 修复验证 + 复盘总结,核心是用数据说话而不是靠猜。