复现-定位问题的关键步骤

本文探讨了在软件开发中遇到的无法稳定复现的问题,强调了排查问题的标准步骤,包括从复现问题到定位、解决和验证。针对不能稳定复现的场景,如部分用户、特定时刻或机器的问题,分析了可能的原因并提出了相应的解决方案,如使用ELK日志系统和增强异常捕获。此外,推荐使用Arthas工具在紧急情况下快速定位问题。总结中指出,掌握有效复现和排查工具对于提高问题解决质量和效率至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

  • 在大家测试联调的过程中,以及线上bug的排查中,有的人喜欢根据报错直接取排查代码,这样导致治标不治本,即只能定位当前问题,诶有办法确定问题的根源,导致项目中依然存在其他的隐患

排查问题的步骤

  • 首先通过自测或者用户反馈,暴露出系统的问题
  • 当运营或者开发收到问题反馈的时候,联系问题提出人提供参数进行复现,当可以稳定复现的时候,说明是必有缺陷,如果不能稳定复现,在下文说明
  • 当可以稳定复现的时候,可以通过参数进行debug,日志,以及返回提示快速定位问题
  • 确定问题之后,解决问题
  • 解决问题之后联系问题提出人进行验证
  • 以上就是公认的排查问题的通常步骤

不能稳定复现的场景

  • 在实际生产环境中,有时会出现不能稳定复现的以下场景
  • 部分用户的存在问题
  • 只有某些时刻存在问题
  • 刚才有问题,现在没问题
  • 只有某些机器有问题,其他机器没问题

小结

  • 以上的列出的场景,虽然体现出系统的缺陷性,但是对于排查成本是极高的,在实际生产中,除非是核心的业务,基本上大家是忽略的
  • 接下来会针对不能稳定复现的场景进行整理和思考,提出一般性的解决方式

不能稳定复现-排查成本高的原因

  • 由于分布式的服务,请求链路长,日志分散
  • 由于系统的qps比较高,打的日志特别多,找起来费事
  • 由于代码里没有使用try-catch异常捕获,导致被全部异常拦截器捕获,异常堆栈不全
  • 问题提出人无法提供有效的复现参数,导致无法定位日志

解决方案

  • elk日志系统
  • 代码返回增加异常捕获

不能稳定复现-场景和可能的原因

 场景原因 解决方案  备注
 部分用户的存在问题 通常是数据问题 修复数据库的数据
 只有某些时刻存在问题 通常是链路问题,如scf调用量过大,被抛弃 提升调用量,排查调用链路
 只有某些机器有问题,其他机器没问题 通常是缓存问题,如不安全的容器类 排查代码里使用的缓存类

最坏的情况-马上就要定位,来不及加日志了

  • 推荐使用arhtas ,Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。  https://arthas.aliyun.com/doc/#
  • 针对这种场景可以使用watch命令和throwExp参数,以及-e
watch com.xxx.web.controller.XXXXController xxxMethod {params,returnObj,throwExp} -e  -x 6

参数说明

  • watch命令可以查看返回值和入参
  • throwExp 等于 Exception对象
  • -e 表示只有在异常的时候才会输出,减少数据量

总结

  • 复现对于解决问题,相当于debug对于开发,是事半功倍的利器
  • 准确的掌握复现的工具使用,可以极大的提升问题的解决质量和解决效率

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值