如何快速解决线上bug

在平时业务开发过程中,不可避免的会遇到一些线上bug,其中不乏一些很紧急的bug。这些问题需要我们快速解决,在前几年的工作过程中,我也积累了一些解决线上问题的经验,这里分享一下我在解决一些线上问题的经验。

定位问题

  1. 线下环境要保证和线上基本一致, php 版本,mysql 版本,扩展版本,PHP nginx 配置应该都一样,各种log 目录。
  2. 线上的crontab 和线下 crontab 也要一致,代码的配置路径也保持一致。
  3. 查看nginx access.log , php error.log, php slow.log, mysql slow log.
  4. 业务代码的log,从业务代码log中找线索,线上dblog最好关闭,线下的dblog可以打开,用来开发过程中调试。
  5. 线下环境验证接口,如果可以复现问题,可以通过代码断点来定位问题。如果问题和数据有关,比如在线下没有发现问题,但是线上有问题,那么就说明线上的数据可能会触发这个bug,可以通过分析数据的特征来猜想可能出现的问题,根据找到的线索仔细查找代码的相关bug。
  6. 如果经过5没有解决问题,可以将线上数据dump到线下库,在测试环境进行debug 操作,定位代码bug。

解决问题

  1. 在定位问题之后,就要从代码层面修复问题。如果解决方案比较简单,比如说是一个条件写错了,或者变量值不对,解决这种问题可能就几行,那么可以快速修改上线。修改完之后,尽量自己构造一些测试用例,检查一下自己修复的版本,尽量确保构造的测试用例可以走到自己的修改逻辑。
  2. 如果要修改的规模比较大,例如是逻辑上的漏洞,需要大面积改动,那么不建议做hotfix,因为在快速的修复过程中,很可能引入不可知的漏洞,出现问题切记不要慌张,一定不要着急上线,只有在很有把握的时候才可以进行线上修复。这种规模的问题,最好该留足够的时间来解决,保证代码质量。

避免引入新问题

  1. 通过构造测试用例,测试自己的代码。
  2. 对上下文依赖比较中的修改,可以通过单元测试,将自己修改的几行代码封装成一个独立的函数,通过独立的测试代码来mock一些上下文数据,来进行测试自己新加的几行代码。尽可能保证线上代码没有一些不必要的错误,从而保证线上业务的稳定性。

《如何快速解决线上bug》
最后说一点,作为一名工程师,一定要注意自己的代码质量,不要以为要迅速解决问题,有时候,如果你的问题太多,就算你干的再多,你可能也不会给团队留下太好的影响。所以,请相信,质量比速度更重要。

点赞

Leave a Reply

Your email address will not be published. Required fields are marked *