1. 故障排查速查表的设计初衷
在运维和开发领域,故障排查往往是最考验工程师综合能力的环节。记得去年我们线上系统突发性能瓶颈,整个团队花了整整8小时才定位到是一个冷门的TCP参数配置问题。这种经历让我意识到:当服务器报警邮件凌晨三点响起时,没人能保持清醒的头脑回忆所有排查步骤。
这就是故障速查表的价值所在——它像消防演习手册一样,把应急流程固化为肌肉记忆。好的速查表应该满足三个特征:覆盖高频故障场景、呈现阶梯式排查路径、附带关键命令和日志特征。比如当数据库连接池爆满时,速查表会引导你先查连接数统计,再查慢查询,最后检查连接泄漏代码,而不是盲目重启服务。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 网络层故障排查框架
2.1 连通性基础检查
从最底层开始,用ping -c 4 目标IP验证基础连通性。如果超时,立即执行traceroute查看路由断点。我曾遇到阿里云SLB后面ECS突然失联的情况,最终发现是安全组规则被误删。此时速查表应该包含:
bash复制# 检查本地ARP缓存
arp -an
# 验证安全组规则
iptables -L -n -v
2.2 TCP连接问题
当应用出现Connection refused或Timeout时,按这个顺序检查:
ss -tlnp确认服务端口监听状态netstat -s | grep -i listen查看积压连接数tcpdump -i eth0 'tcp port 80' -w /tmp/debug.pcap抓包分析
关键技巧:TIME_WAIT状态堆积往往源于短连接频繁创建,需要在速查表中标注
net.ipv4.tcp_tw_reuse=1的调优参数。
3. 应用层经典故障模式
3.1 线程阻塞问题
Java应用突然卡顿?速查表应该包含以下诊断命令链:
bash复制# 1. 抓取线程栈
jstack <pid> > thread_dump.log
# 2. 统计GC情况
jstat -gcutil <pid> 1000 5
# 3. 检查死锁
jcmd <pid> Thread.print
去年我们一个支付系统出现周期性卡顿,通过速查表快速定位到是CMS GC并发模式失败导致的STW停顿。在表格中特别标注了以下经验值:
code复制年轻代GC频率 > 10次/分钟 → 需要扩容Eden区
Full GC耗时 > 1秒 → 检查老年代对象引用
3.2 内存泄漏排查
用这个检查清单能节省80%的排查时间:
top -p <pid>观察RSS增长曲线jmap -histo:live <pid>查看对象分布jmap -dump:format=b,file=heap.hprof <pid>导出堆分析
避坑指南:线上环境慎用jmap -dump,可能引发STW停顿。建议在速查表中添加
-F参数强制模式的使用条件说明。
4. 数据库故障应急方案
4.1 慢查询风暴
当数据库CPU飙高时,按这个流程操作:
sql复制-- 1. 查看当前运行会话
SHOW PROCESSLIST;
-- 2. 捕获慢查询
SELECT * FROM sys.schema_table_statistics
WHERE avg_latency > 1000;
-- 3. 临时止血
KILL <thread_id>;
在速查表中需要特别标注:如果发现大量"Sending data"状态,很可能是未用索引的全表扫描。我们曾用这个提示在3分钟内解决了CRM系统瘫痪事故。
4.2 连接池耗尽
连接池报错时,速查表应包含以下诊断步骤:
- 检查连接数配置与实际使用比例
- 监控连接获取等待时间
- 分析连接持有时间分布
建议在表格中添加类似这样的经验数据:
code复制MySQL max_connections = 300时
建议连接池大小 = (max_connections - 10) / 实例数
5. 分布式系统特殊场景
5.1 脑裂问题检测
对于使用ZooKeeper/Etcd的系统,速查表必须包含脑裂检查项:
bash复制# 检查集群节点状态
echo stat | nc 127.0.0.1 2181
# 验证leader有效性
echo mntr | nc 127.0.0.1 2181 | grep leader
5.2 时钟漂移处理
我们曾因NTP服务异常导致Kafka消息乱序。现在速查表中强制要求检查:
bash复制# 检查时钟偏移量
ntpstat
# 查看时间同步状态
chronyc sources -v
6. 速查表的维护与优化
好的速查表需要持续迭代。我们团队每解决一个新类型故障,就会立即更新速查表。建议包含这些元信息:
- 故障首次发生时间
- 影响系统版本
- 验证通过的解决方案
- 相关文档链接
最近我们给速查表增加了Markdown版本托管在Git,支持通过git blame查看每条记录的维护者。当处理K8s Pod频繁重启问题时,发现三年前记录的kubectl describe pod命令参数已经过时,这种版本追踪显得尤为重要。
