01 如何解决线上游戏服务器的bug?


开始写这个专栏的初衷,是有天发现自己的记忆力随着年龄的增长在不断衰退,但是感觉自己在过往几年的工作中积累的游戏服务器线上事故处理&预防的经验,如果就这么都忘了的话怪也可惜的,决定写一写,如果写出来能帮到一些人就更好啦。(因为本人是做手游的,所以标题及正文里面提到的“游戏”都指手游哈~)

专栏里面的事例有些来自亲身经历,有些是编的,有些信息会混淆以脱敏。


游戏的bug类型有很多,从简单的显示问题、到复杂一些的游戏逻辑错误、再到严重的闪退、外挂、回档问题都可能发生,其中和游戏服务器相关的就是游戏逻辑相关的问题和玩家数据相关的问题。对于服务器程序员来说,解决问题的方法说到底很简单:复现问题、找到问题&修复问题、修复玩家数据(重要)、发布bug修复及数据修复、复盘。

  • 复现问题这一步,就是找到问题是在什么场景下、进行了什么操作之后发生的,一般QA同事也会协助,但是对于程序来说,毕竟代码是自己写的,在遇到问题的时候,自己看代码、自己复现往往是效率最高的,一定要积极参与这一步。一点私人的建议是,在写代码的过程中有时候会有一些“这里好像有点问题,但是好像又没啥问题”的地方,这种地方往往会隐藏bug,一定要留心。
  • 在稳定复现bug之后一般就能够找到问题,并着手修复问题。在修复问题的时候一定要注意的是,要正确修复&完全修复、而且不要在修复这个问题的过程中引入新的bug或者兼容性问题。线上出现了问题,神经紧张是正常的,但是即使紧张也要保持住自己的判断力,确认原因、确认范围,不要把bug越改越大、越改越严重。
  • 一般服务器这边的问题都会影响到玩家数据,因此在修复问题的时候,也要考虑如何将玩家的数据恢复到正确的状态。在某些情况下在代码里面写个补丁即可恢复,但是在某些情况下还需要拉取bug期间玩家的操作流水、或者写额外的操作脚本才能进行正确恢复,在后面会提到。
  • 发布修复的方法根据项目不同的情况会有不同,如果支持线上热更的话可以热更出去,如果不支持的话需要考虑停服更新或者闪断更新,如果操作可能涉及运营补偿等等的话记得和运营同事同步。
  • 复盘就没啥好说的了,总结经验教训,看看当前的代码/系统有没有可以优化的地方,避免下次再出现问题~

从下一篇开始,会从一些事例开始写写各种各样的线上问题,以及处理它们的经历~