程序员进阶攻略
胡峰
京东成都研究院技术专家
33679 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
蜕变:破茧成蝶 (3讲)
结束语 (1讲)
程序员进阶攻略
15
15
1.0x
00:00/00:00
登录|注册

13 | Bug的时间属性:周期特点与非规律性

总结
解决方法
神出鬼没
非规律性
周期特点
Bug的时间属性:周期特点与非规律性

该思维导图由 AI 生成,仅供参考

在上一篇文章中,我说明了“技术性 Bug 可以从很多维度分类,而我则习惯于从 Bug 出现的 ‘时空’ 特征角度来分类”。并且我也已讲解了 Bug 的空间维度特征:程序对运行环境的依赖、反应及应对。
接下来我再继续分解 Bug 的时间维度特征。
Bug 有了时间属性,Bug 的出现就是一个概率性问题了,它体现出如下特征。

周期特点

周期特点,是一定频率出现的 Bug 的特征。
这类 Bug 因为会周期性地复现,相对还是容易捕捉和解决。比较典型的呈现此类特征的 Bug 一般是资源泄漏问题。比如,Java 程序员都不陌生的 OutOfMemory 错误,就属于内存泄漏问题,而且一定会周期性地出现。
好多年前,我才刚参加工作不久,就碰到这么一个周期性出现的 Bug。但它的特殊之处在于,出现 Bug 的程序已经稳定运行了十多年了,突然某天开始就崩溃(进程 Crash)了。而程序的原作者,早已不知去向,十多年下来想必也已换了好几代程序员来维护了。
一开始项目组内经验老到的高工认为也许这只是一个意外事件,毕竟这个程序已经稳定运行了十来年了,而且检查了一遍程序编译后的二进制文件,更新时间都还停留在那遥远的十多年前。所以,我们先把程序重启起来让业务恢复,重启后的程序又恢复了平稳运行,但只是安稳了这么一天,第二天上班没多久,进程又莫名地崩溃了,我们再次重启,但没多久后就又崩溃了。这下没人再怀疑这是意外了,肯定有 Bug。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Bug的时间属性,特别是周期特点和非规律性。周期性Bug相对容易捕捉和解决,而非规律性Bug的出现更具挑战性。作者分享了在工作初期遇到的一个周期性Bug,以及在处理非规律性Bug时的经验和挑战。文章以生动的案例和详细的技术分析,展现了解决Bug的过程和技术手段,为读者提供了深入了解和思考的机会。同时,文章也指出了解决非规律性Bug的局限性,强调了采用工具如代码Profiler等性能剖析工具的重要性。海森堡 Bug的出现场景通常与分布式的并发编程有关,其无法进行观测,也就是在生产环境下不经意出现,费尽心力却无法重现的Bug。文章提到了海森堡 Bug 的出现场景和解决方法,强调了预防与埋伏的重要性。总的来说,文章内容丰富,对读者快速了解Bug的时间属性和解决方法提供了有益的参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员进阶攻略》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • sunny
    看得我惊心动魄,以前老是害怕bug出现,现在有点小期待;看看热闹,长长见识,毕竟还在初级,

    作者回复: 哈哈,心情平复没

    2018-08-31
    9
  • liangjf
    少壮不遇bug,老大徒伤悲

    作者回复: 哈哈哈😄

    2018-09-07
    4
  • 二木🐶
    第一类bug的查找案例实在是不敢恭维,重要的正式环境这样去不断重启应用,加日志等方式简直就是不可能的

    作者回复: 以前写代码都是直接在正式环境编译运行,相当野😂

    2018-10-06
    3
  • 艾尔欧唯伊
    最近刚入职组里遇到的问题。。四个应用加一层设备,然后还有硬件资源紧张,合在一起出现的bug表象,基本就是各种展示数据不对。。。 有些提了缺陷,但是问题环境都没了。。复现都很难。。。真不容易。。

    作者回复: 是的,现实多是带着一身 Bug 勇敢的上线了😊

    2018-08-31
    3
  • 心在飞
    我现在就遇到个海森堡bug, 客户现场出现过一次,在自己的服务器环境里一切正常,只能通过code review的方式做一些防御性编程,结果发现算法是老美算法专家92年写的!乱飞的point、各种业务处理算法,瞬间我就不想看了!

    作者回复: 太古老的代码,理解起来没了上下文,全靠想象力了,多半要重写了吧

    2018-08-31
    3
  • 无聊夫斯基
    需要这么多的逻辑判断的50ms的程序你是如何优化成3ms的?

    作者回复: 因为代码写得实在太糟糕了,可优化空间太大😄

    2018-08-31
    2
    3
  • CatTalk
    生动形象的讲解

    作者回复: 😊

    2018-08-31
    3
  • 香槟
    之前有遇到一个bug,关于redis序列化和反序列化的。线上有6台服务器,升级了其中一台服务器,内容是增加了调用链监控的程序。升级完先上线看效果。由于机子的aspnet版本需更新,同时更新了内部redis封装的库。前半天运行正常,然后出现部分列表数据不一致的情形。赶紧写了段程序输出值看下。发现值均变为0。看代码是反序列化出值部分。看正常的列表数据,反序列化有值。看库里,发现两者的区别是一种序列化进去有引号,另一种序列化进去没引号。没引号的能在其他5台机子解析,而有引号的只能在升级库中解析。所以定位到了原因。为了顺利上线监控程序,又能平滑升级,选择了调整封装库的序列策略,改为序列成无引号的方式。这才解决不一致的问题。

    作者回复: 升级这种基础库,还是要多回归测试,兼容性问题不难,但处理起来很费时间和精力

    2019-02-23
    2
  • third
    迟到了。总算解决好学校的事情了。 心得如下 1,bug的时间属性:周期特点和非规律性 2,周期性出现,比如OutOfMemory,内存泄露。 3,非规律性,解决麻烦,采用工具,直接引入代码 Profiler 等性能剖析工具,就可以准确地找到有性能问题的代码段 4,神出鬼没,海森堡 Bug(Heisenbug) 5,bug的解决之道有两种,事前的,事后的。 6,事后,Bug 出现后,捕捉现场并定位解决的 7,事前进行预防和埋伏

    作者回复: 不迟😊

    2018-09-01
    2
    2
  • 目前在优化的一些缓存刷新的定时任务,就属于过几年可能会出Bug的代码(因为这代码就是几年前写的,现在出问题了)原因如下 1:缓存刷新的方式是先删后插 2:我厂的统一规定不允许数据物理删除 3:经久年月,无效数据越来越多,原来缓存刷新没问题,后来就有了空窗期,在空窗期内访问缓存就会出现问题了
    2018-09-01
    3
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部