线上问题系统性处理指南 发表于 2025-03-03 | 分类于 好文分享 | 暂无评论 当系统崩溃、用户投诉如潮,你准备好了吗?这篇文章提供了处理技术与业务问题的完整框架。系统性地介绍了问题分类、分级标准、生命周期管理和应急处理方法,包含了从业务分析到技术排查的多种实用策略。 一、问题分类与基础知识 ----------- ### 1\. 问题类型 #### 1.1 业务问题 * **用户体验问题**:操作不当、功能理解偏差、界面交互不清晰 * **功能异常问题**:操作流程中断、页面卡顿、加载失败 * **数据质量问题**:数据错误、不一致或丢失 * **流程设计问题**:业务流程不合理、节点缺失 * **权限管理问题**:用户权限配置不当、角色分配错误 * **业务规则问题**:规则实现与预期不符 * **第三方集成问题**:外部系统接口异常、服务不可用 #### 1.2 技术问题 * **系统资源问题**:内存溢出、CPU高负载、磁盘空间不足 * **代码质量问题**:Bug、性能瓶颈、安全漏洞 * **部署运维问题**:发布异常、配置错误、环境不一致 * **网络通信问题**:延迟高、连接断开、DNS解析失败 * **数据库问题**:慢查询、死锁、连接池耗尽 * **缓存机制问题**:缓存击穿、缓存雪崩、数据不一致 * **中间件问题**:消息队列阻塞、服务注册异常 * **安全防护问题**:DDoS攻击、SQL注入、未授权访问 ### 2\. 问题分级标准 | 级别 | 定义 | 响应时间 | 示例 | |----|----------------|-------|---------| | P0 | 系统完全不可用,严重业务中断 | 立即响应 | 支付系统瘫痪 | | P1 | 核心功能受限,影响部分用户 | 30分钟内 | 订单无法完成 | | P2 | 功能可用但体验下降 | 2小时内 | 页面加载缓慢 | | P3 | 小问题,不影响核心业务 | 24小时内 | 非关键UI错误 | 二、问题处理通用流程 ---------- ### 1\. 问题生命周期管理 * **发现与记录**:问题发现、记录完整信息 * **分类与分派**:问题分类、指派责任人 * **分析与定位**:根因分析、问题定位 * **解决与验证**:实施解决方案、验证效果 * **关闭与总结**:问题关闭、经验总结 * **知识沉淀**:更新知识库、完善文档 ### 2\. 问题发现渠道 * 监控告警自动发现 * 用户反馈与工单 * 内部测试发现 * 运营数据异常 ### 3\. 应急处理四步法 #### Step 1: 判断是否发生变化 * **关键变化类型**: * 代码发布:新版本上线、热修复部署 * 配置变更:功能开关、阈值调整、规则更新 * 依赖升级:组件版本升级、接口变更 * 基础设施变化:网络调整、服务器更换、容器迁移 * 数据变更:数据库结构调整、大批量数据操作 * **变化识别工具**: * 发布系统记录查询 * 配置中心变更日志 * 基础设施变更日历 * 数据库操作审计日志 * **变化处理策略**: * 回滚决策机制与执行 * 无法回滚时的降级策略 #### Step 2: 判断是否为单机问题 * **单机问题特征**: * 集群中只有个别节点出现问题 * 节点级别指标异常(CPU、内存、磁盘IO) * 特定节点的错误日志明显不同 * **高效摘除策略**: * 负载均衡器健康检查调整 * 服务注册中心下线操作 * 容器/实例快速替换流程 * 问题节点隔离(保留现场) * **问题节点分析**: * * 现场保护:磁盘快照、内存转储、线程dump * 日志采集与资源监控 #### Step 3: 判断是否为集群问题 * **单个API错误处理**: * API精确降级开关管理 * 特定接口限流机制 * 热点API缓存策略 * 功能特性快速关闭机制 * **多个API错误处理**: * 全链路压力传导分析 * 集群整体资源评估 * 批量请求特征分析 * 代码共性问题排查 * **流量应对策略**: * 多级限流机制 * 紧急扩容流程 * 流量分流与隔离 * 用户请求优先级处理 #### Step 4: 判断依赖的服务/存储是否有问题 * **依赖问题快速确认**: * * 依赖服务健康检查API * 存储系统状态检查工具 * 第三方服务状态页面 * 跨团队应急联络机制 * **依赖问题联动处理**: * 跨团队联合应急会议 * 多方协作的问题定位分工 * 责任边界快速厘清 * 升级机制与决策链 * **快速止血措施**: * 熔断器与降级开关 * 本地缓存与降级后备数据 * 请求重试与补偿机制 * 关键依赖多活设计 三、业务问题处理 -------- ### 1\. 业务问题分析方法 * **问题边界确定法**: * 时间边界:问题开始和结束的时间点 * 用户边界:受影响的用户群体特征 * 功能边界:受影响的具体功能模块 * 数据边界:受影响的数据范围 * **二分法排查**: * 将可能的原因列表分成两半 * 通过判断性测试排除一半可能性 * 对剩余部分再次应用二分法 * **特征匹配法**: * 收集问题的关键特征 * 查找类似历史案例 * 套用类似案例的排查思路 * **异常数据追踪法**: * 识别问题相关的异常数据 * 追踪数据产生的完整链路 * 定位数据异常的源头节点 * **用户反馈聚类分析**: * 收集用户反馈并聚类 * 识别高频问题模式 * 定位共性问题根源 * **实时用户操作跟踪**: * 指导用户操作并收集反馈 * 实时查看用户的操作日志 * **业务指标异常关联分析**: * 监控关键业务指标的异常 * 分析异常指标间的相关性 * 追踪指标异常的来源 ### 2\. 业务问题根因分析 * **5W2H分析法**: * What:发生了什么问题? * When:什么时候发生的? * Where:在哪个环节发生的? * Who:影响了哪些用户? * Why:为什么会发生? * How:是如何发生的? * How much:造成了多大影响? * **鱼骨图分析**: * 人员因素:操作错误、培训不足、责任不明 * 流程因素:流程缺失、流程不合理、审核不严 * 系统因素:功能缺陷、交互不友好、性能问题 * 数据因素:数据错误、数据缺失、数据不一致 * 规则因素:规则不明确、规则冲突、规则过时 * **决策树分析**: * 从问题现象出发,逐步分支排查 * 根据数据证据确认或排除分支 * **用户旅程图分析**: * 绘制用户完整操作路径 * 标记各环节可能的问题点 * 分析各环节转化率异常 ### 3\. 业务问题解决策略 * **临时解决方案**: * 数据修复 * 人工干预处理 * 业务规则临时调整 * 用户引导 * **根本解决方案**: * 业务流程优化 * 用户界面改进 * 业务规则调整 * 功能增强(如增加使用说明等) 四、技术问题处理 -------- ### 1\. 技术问题监控与发现 * **监控告警机制**: * 系统监控(CPU、内存、磁盘、网络) * 应用监控(接口延迟、错误率、吞吐量) * 业务监控(订单量、转化率、关键指标) * 日志监控(错误日志、异常堆栈) 注意告警需要有分级和降噪,否则问题出现可能有大量告警导致忽略真正问题 ### 2\. 技术问题定位方法 * **日志分析**: * 错误日志收集 * 异常堆栈分析 * 关联日志查询 * 服务调用链追踪 * **监控数据分析**: * 系统资源趋势分析 * 性能指标对比 * 异常流量分析 * 依赖服务健康状态检查 * **问题定位工具使用**: * 线程Dump分析 * GC日志分析 * 数据库执行计划分析 * 网络抓包分析 * **问题复现**: * 测试环境复现 * 压测触发 * 代码审查 * 配置核对 ### 3\. 技术问题根因分析 * **系统资源根因分析**: * **内存问题分析**: * 堆内存分析:堆转储、对象统计、GC日志分析 * 内存泄漏分析:对象引用链分析、内存趋势监控 * 非堆内存分析:直接内存、代码缓存区、线程栈 * **CPU问题分析**: * 热点方法分析:CPU采样、火焰图 * 线程状态分析:线程dump、阻塞分析 * 系统调用分析:strace、perf * **磁盘IO问题分析**: * IO等待分析:iostat、iotop * 文件系统分析:du、lsof * 读写模式分析:顺序读写vs随机读写 * **代码级根因分析**: * **异常堆栈分析**: * 异常类型识别:NullPointerException、OutOfMemoryError等 * 堆栈信息解读:出错代码行、调用链路 * 相关变量状态:请求参数、环境变量、配置项 * **代码审查**: * 资源释放检查 * 并发安全检查 * 边界条件测试 * **系统架构根因分析**: * **依赖服务分析**: * 服务调用链追踪 * 依赖服务健康检查 * 接口规则验证 * **数据流分析**: * 数据一致性检查 * 数据链路追踪 * 数据转换验证 * **容量评估**: * 系统瓶颈识别 * 资源使用趋势分析 * 扩展性限制因素 ### 4\. 技术问题解决策略 * **应急处理**: * * 服务重启 * 资源扩容 * 流量限制 * 降级或熔断 * 回滚版本 * **根本原因修复**: * 代码修复 * 架构优化 * 配置调整 * 资源规划调整 * 依赖组件升级 * **修复验证与生产恢复**: * 功能测试与性能测试 * 灰度发布 * 全量发布 * 流量恢复 * 监控跟踪 五、服务预防与了解机制 ----------- ### 1\. 了解你的服务 * **绘制应用系统架构图** * **服务用户**:服务给谁用,出了问题应该通知到谁 * **功能模块**:包含哪些模块,应用了哪些功能 * **系统流程**:模块间如何流转的 * **依赖的中间件**:依赖了哪些中间件,对应负责人是谁 * **依赖的存储、消息队列**:依赖了哪些存储,存储运维负责人是谁 * **依赖的服务**:依赖了哪些服务,出了问题找谁,是否可降级 * **绘制应用系统部署图** * * 系统是如何部署的,部署在什么环境 * 如何登录、扩容、升级配置 * 自动化部署流程与回滚机制 * **梳理系统故障等级** * 哪些模块是核心的,不可降级的 * 哪些模块是非核心的,可以降级的 * 各模块故障对业务的影响程度 ### 2\. 压测与演练 * **系统性能测试** * 当前系统能够支持的单机QPS是多少 * 可能存在的性能瓶颈是什么 * 系统扩容后的性能预期与验证 * **依赖分析与压力点识别** * 当前应用的API读写比是多少,对应到各个存储层面的比例 * 当应用QPS上升,哪个依赖最先会成为瓶颈 * 各依赖的极限承载能力与业务增长预期的匹配度 * **故障演练** * 定期进行故障模拟演练 * 关键依赖不可用时的降级策略测试 * 高流量应急扩容演练 * 数据不一致修复演练 转载自: >https://juejin.cn/post/7476826392380276736