Skip to main content

[系统/功能] 故障排查手册

文档版本:v1.0
适用环境:生产环境 / 测试环境
更新日期:2025-01-20
维护团队:[团队名称]


概述

本文档提供 [系统名称] 的常见故障排查指南,包括问题诊断、解决方案和预防措施。

紧急联系方式

角色姓名联系方式工作时间
技术负责人张三138xxxx123424小时
运维工程师李四138xxxx56789:00-21:00
开发工程师王五138xxxx90129:00-18:00

一、快速诊断流程


二、常见问题分类

问题严重等级
等级影响范围响应时间示例
P0 - 紧急核心功能不可用,影响所有用户15分钟内系统宕机、数据库崩溃
P1 - 高优先级重要功能异常,影响大部分用户1小时内支付失败、登录缓慢
P2 - 中优先级部分功能异常,影响部分用户4小时内报表错误、通知延迟
P3 - 低优先级小问题,影响体验1个工作日内UI显示问题、文案错误

三、系统无响应问题

3.1 问题描述

症状

  • 网站无法访问
  • API请求超时
  • 服务器无响应

3.2 诊断步骤

步骤1:检查服务状态

bash
1# 检查应用进程
2ps aux | grep java
3ps aux | grep node
4
5# 检查端口占用
6netstat -tunlp | grep 8080
7lsof -i :8080
8
9# 检查系统资源
10top
11free -h
12df -h

步骤2:检查网络连接

bash
1# 测试网络连通性
2ping api.example.com
3
4# 测试端口是否开放
5telnet api.example.com 80
6nc -zv api.example.com 80
7
8# 查看网络连接
9netstat -an | grep ESTABLISHED

步骤3:检查日志

bash
1# 查看应用日志
2tail -f /var/log/app/application.log
3
4# 查看错误日志
5tail -f /var/log/app/error.log
6
7# 查看系统日志
8tail -f /var/log/syslog
9
10# 搜索特定错误
11grep "OutOfMemoryError" /var/log/app/*.log

3.3 常见原因与解决方案

系统无响应问题解决方案
原因症状解决方案预防措施
进程崩溃找不到应用进程重启应用服务配置进程守护、添加健康检查
内存溢出OutOfMemoryError增加堆内存、重启服务优化内存使用、添加监控告警
端口被占用无法绑定端口终止占用进程或更换端口使用标准端口、配置端口管理
磁盘空间满无法写入日志清理日志文件、扩容磁盘配置日志轮转、监控磁盘使用

3.4 解决方案示例

方案1:重启应用服务

bash
1# 使用systemd重启
2sudo systemctl restart myapp
3
4# 使用PM2重启
5pm2 restart myapp
6
7# 使用Docker重启
8docker restart myapp-container

方案2:清理磁盘空间

bash
1# 查找大文件
2du -h /var/log | sort -rh | head -20
3
4# 压缩旧日志
5gzip /var/log/app/*.log.1
6
7# 删除旧日志
8find /var/log/app -name "*.log.*" -mtime +7 -delete
9
10# 清理Docker镜像
11docker system prune -a

四、性能问题

4.1 响应时间慢

诊断工具

bash
1# 测试API响应时间
2curl -w "\nTime: %{time_total}s\n" https://api.example.com/health
3
4# 使用ab进行压力测试
5ab -n 1000 -c 100 https://api.example.com/
6
7# 查看数据库慢查询
8mysql> SHOW FULL PROCESSLIST;
9mysql> SELECT * FROM information_schema.PROCESSLIST WHERE TIME > 5;

性能分析

bash
1# JVM性能分析
2jstack <pid> > thread_dump.txt
3jmap -heap <pid>
4
5# Node.js性能分析
6node --prof app.js
7node --prof-process isolate-*.log > processed.txt
8
9# 系统性能分析
10vmstat 1 10
11iostat -x 1 10

4.2 数据库性能问题

检查连接数

sql
1-- MySQL
2SHOW STATUS LIKE 'Threads_connected';
3SHOW VARIABLES LIKE 'max_connections';
4
5-- 查看慢查询
6SHOW VARIABLES LIKE 'slow_query%';
7SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 10;

优化建议

sql
1-- 添加索引
2CREATE INDEX idx_user_email ON users(email);
3
4-- 分析查询计划
5EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
6
7-- 优化表
8OPTIMIZE TABLE users;

五、数据库连接问题

5.1 连接池耗尽

症状

1ERROR: Connection pool is exhausted
2Unable to acquire connection from pool

诊断

bash
1# 查看数据库连接
2mysql> SHOW FULL PROCESSLIST;
3
4# 查看连接池配置
5grep -A 10 "datasource" application.yml

解决方案

yaml
1# 调整连接池配置
2spring:
3 datasource:
4 hikari:
5 maximum-pool-size: 20
6 minimum-idle: 5
7 connection-timeout: 30000
8 idle-timeout: 600000
9 max-lifetime: 1800000

5.2 连接超时

诊断命令

bash
1# 测试数据库连接
2mysql -h localhost -u root -p -e "SELECT 1"
3
4# 检查网络延迟
5ping database-host
6
7# 检查防火墙
8telnet database-host 3306

六、内存泄漏问题

6.1 诊断步骤

bash
1# 查看内存使用
2free -m
3ps aux --sort=-%mem | head
4
5# JVM内存分析
6jmap -dump:live,format=b,file=heap.bin <pid>
7
8# 使用MAT分析dump文件
9# 下载 Eclipse Memory Analyzer Tool
10
11# Node.js内存分析
12node --inspect app.js
13# 在Chrome中打开 chrome://inspect

6.2 常见原因

原因症状解决方案
缓存未清理内存持续增长设置缓存过期时间、定期清理
事件监听器泄漏监听器越来越多及时移除监听器
闭包引用对象无法回收避免不必要的闭包
数据库连接未关闭连接数持续增加使用try-finally确保关闭

七、日志分析

7.1 错误日志关键词

bash
1# 搜索常见错误
2grep -i "error" application.log
3grep -i "exception" application.log
4grep -i "failed" application.log
5
6# 统计错误次数
7grep -c "NullPointerException" application.log
8
9# 查看错误上下文
10grep -A 5 -B 5 "OutOfMemoryError" application.log

7.2 日志分析工具

bash
1# 使用awk分析日志
2awk '/ERROR/ {print $0}' application.log
3
4# 使用grep和sort统计
5grep "ERROR" application.log | cut -d' ' -f5 | sort | uniq -c | sort -rn
6
7# 实时监控日志
8tail -f application.log | grep --line-buffered "ERROR"

八、监控与告警

8.1 关键指标

指标类型监控项告警阈值处理优先级
系统资源CPU使用率> 80%P1
内存使用率> 85%P1
磁盘使用率> 90%P0
应用性能API响应时间> 1sP2
错误率> 1%P1
QPS异常波动P2
数据库连接数> 80%P1
慢查询数> 100/分钟P2
锁等待> 5秒P1

8.2 监控工具推荐

监控工具对比
工具类型优势适用场景
Prometheus指标监控灵活强大、社区活跃全面监控
Grafana可视化图表丰富、易于使用数据展示
ELK Stack日志分析功能全面、搜索强大日志管理
Zabbix综合监控开箱即用、告警完善传统监控

九、应急响应流程

9.1 紧急故障处理

9.2 故障响应清单

  • 记录故障发现时间
  • 评估影响范围和用户数
  • 通知相关负责人
  • 隔离故障组件
  • 实施临时方案
  • 验证修复效果
  • 监控系统稳定性
  • 编写故障报告
  • 制定预防措施

十、预防措施

10.1 日常检查清单

每日检查

  • 查看系统监控大盘
  • 检查错误日志
  • 查看关键接口性能
  • 确认备份任务执行

每周检查

  • 审查慢查询日志
  • 检查磁盘空间
  • 更新依赖版本
  • 执行压力测试

每月检查

  • 安全漏洞扫描
  • 性能基准测试
  • 故障演练
  • 文档更新

10.2 最佳实践

💡 运维建议
  1. 自动化监控:配置完善的监控告警系统
  2. 日志规范:统一日志格式,便于分析
  3. 文档更新:及时记录故障和解决方案
  4. 演练机制:定期进行故障演练
  5. 备份策略:确保关键数据定期备份

十一、常用命令速查

Linux系统命令

bash
1# 进程管理
2ps aux | grep java
3kill -9 <pid>
4systemctl status myapp
5
6# 网络诊断
7netstat -tunlp
8ss -tunlp
9tcpdump -i eth0 port 80
10
11# 磁盘管理
12df -h
13du -sh /*
14lsof | grep deleted
15
16# 日志查看
17tail -f /var/log/app.log
18journalctl -u myapp -f

Docker命令

bash
1# 容器管理
2docker ps
3docker logs -f container_name
4docker exec -it container_name bash
5docker restart container_name
6
7# 资源查看
8docker stats
9docker system df

十二、故障案例库

案例1:数据库死锁导致服务假死

时间:2025-01-15 14:30
影响:订单创建功能不可用,持续15分钟
原因:两个事务互相等待对方释放锁
解决:手动终止死锁事务,优化事务顺序
预防:添加死锁检测告警,优化SQL执行顺序

案例2:Redis缓存雪崩

时间:2025-01-18 10:00
影响:系统响应慢,数据库负载飙升
原因:大量缓存同时过期,请求直接打到数据库
解决:重启Redis,设置随机过期时间
预防:缓存过期时间添加随机值,实现缓存预热


附录

A. 联系方式

服务联系方式
技术支持热线400-xxx-xxxx
运维邮箱ops@example.com
钉钉群xxxxx
值班表查看值班表

B. 相关文档


重要提醒

在生产环境进行任何操作前,请务必:

  1. 评估影响范围
  2. 准备回滚方案
  3. 通知相关人员
  4. 做好操作记录

参与讨论