一年半才重现一次的bug

bug出现的时间点

  • 2015-10-13 我负责的一个使用c写的业务进程奔溃,使用gdb查看coredump文件发现是在对业务包做反序列化的时候,在序列化库里崩溃了。
  • 当时怀疑是业务包有问题,但也不能排除业务进程踩内存的可能,因为后续这个奔溃也再没出现,且哪个时候排查手段也不多,故没有深入去排查这个bug。
  • 2017-04-27 这个业务奔溃了两次和2015-10-13是一样的堆栈。

进程“死亡现场”

使用gdb细看coredump文件发现是在反序列化解析过程中解析失败然后跳到清理逻辑,在释放一个数组内存的时候引用的了空指针从而导致的奔溃,库代码在释放内存时没做空指针校验。

排查过程

这个时候还是不能完全排除业务进程踩内存导致业务包异常的问题,但是相比2015-10-13日我们已经添加了一个请求和应答稽核数据,这个数据会记录客户端所有的请求和应答数据,通过这个数据稽核查看工具发现对应有问题的业务请求的确是有问题的,那么这时我们可以确认这个bug是由客户端导致的,而不是业务进程踩了内存。

修复问题

  • 修改反序列化库中释放空间的代码,添加上空指针的检查,规避服务端收到问题请求崩溃问题,从而导致业务中断。
  • 把现象和数据反馈给客户端,让客户端去排查问题。

思考

任何系统做大之后,业务数据都会通过很多环节和系统,出现问题很难排查,通常很有必要对业务请求做全路径的监控和记录,这样查问题时才能事半功倍。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,604评论 25 709
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,512评论 11 349
  • 飘飘小雪荡起薄雾 暂别时 第一次觉得想念 归来时 第一次觉得温暖 你若问为何? 我会说 如你般喜欢所有美好 如你般...
    一个时空阅读 1,207评论 0 0
  • 第一章 玛雅系统
    8733c2ed953e阅读 1,369评论 0 0
  • 今天帮朋友在杭州找找租房的信息。 找了几套后总结了以下要素。 作为租客,要租住的房子,明确以下要素: 热闹的VS清...
    元小由阅读 1,720评论 0 0

友情链接更多精彩内容