我听到过的最精彩的一个软件纠错故事

那还是80年代初期,我爸爸在一家存储设备公司工作,这个公司现在已经不存在了,它生产磁带机和驱动这些磁带高速运转的气动系统 —— 这是那个时代的产物。


(Used under license from Laughing Squid. 原始图片可以在 这里找到。)

他们技术改造了磁带驱动器,使得你可以只有一个中心驱动器 —— “A”盘 —— 由它连接着数个“B”盘,在跟A盘连接的内存里驻留这一个小型的操作系统,负责代理所有B盘的数据的读写操作。

每次当你启动A驱动器,你需要在外围驱动器里插入一张软盘,操作系统会把A盘加载到内存里。这个操作系统简单的出奇 —— 它的处理能力全部从一个8字节的微型控制器产生。

这种设备的目标用户是拥有大量数据的企业 —— 银行,杂志等等 —— 他们需要打印大量的地址簿或银行帐目。

有个客户出现了一个问题。在打印的过程中,有个别的驱动器会停止工作,导致整个打印过程终止。为了重载驱动器,值班人员必须重启所有驱动 —— 如果这种事情发生在一个6小时的打印任务中,大量宝贵的计算机使用时间都会浪费,整个任务将不能按时间完成。

公司派出了技术人员。技术人员尽了他最大的努力也不能在测试环境复制出这个问题:这个问题似乎只会出现在打印大量任务的过程中。尽管问题出在硬件上可能性微乎其微,他还是更换了所有的设备 —— 内存,微处理器,磁盘驱动,所有跟磁带机相关的部件 —— 但问题仍然出现。

于是技术人员打电话给总部叫来了一位专家

专家要了一把椅子和一杯咖啡,坐在了计算机房 —— 那个时候他们已经专门为计算机提供了机房 —— 值班人员准备了一大堆的打印任务,他就在旁边看着。他等着,一直到机器崩溃。机器果真崩溃了,所有人都看着专家 —— 专家没有发现任何的线索。他命令把打印任务重新执行一次,所有的值班人员和技术人员都回各自岗位工作。

专家又在椅子上做下来,等着机器崩溃。这一等就是六小时,但真的又发生了。专家仍然没有弄清是什么导致了崩溃 —— 除了有一点他注意到,崩溃总是发生在屋内人比较多的时候。他命令再打印一次,重新坐下,等着。

当第三次崩溃时,他发现了一件事情。崩溃总是在值班人员更换其他没有关联的启动盘时发生的。进一步研究,他意识到当一个值班人员走过某块地板时崩溃就会发生。

地板是由铝制的板块拼成,下面有6 到 8 英寸高的隔空层,计算机所使用的大量的电缆都走地板下,这样可以避免值班人员无意间踢到它们。地板块间拼合的很紧密,这是为了保证垃圾不掉进电缆通过的空间。

专家说有一块地板变形了。当值班人员踩着这块变形的地板的一角时,地板块的边缘相互摩擦,这就会跟连接各地板的塑料之间产生静电,进而造成电磁干扰。

如今所有的RAM都有防电磁干扰功能。但当时并没有这种技术。专家指出,电磁干扰破坏的RAM的工作,操作系统也就崩溃了。

专家打电话给维护部门,拿来了一块新地板,他自己把它装上,问题就这样解决了。

分享这篇文章:
[英文原文:The Best Debugging Story I’ve Ever Heard ]

36 Responses to 我听到过的最精彩的一个软件纠错故事

  1. 很不错,不光从技术方面解决问题,有些问题也不是由技术造成的。学习了

    • 凉拌茶叶 says:

      很多设备的接地电压也很敏感。比如《三体》第一部里面,她弄死两个人的剧情。

      我觉得这种事情就像笔掉到地上找不到,其实很可能是在抽屉里面。专家肯定也有很丰富的经验。

  2. Doraemon says:

    确实,有时候一个错误不一定是软件引起的,各方面的原因都有可能~真是太精彩鸟~

  3. huansinho says:

    专家的洞察能力不是一般的强

  4. kedron says:

    其实专家用的是“最笨”的方法,但是很多人搞技术久了,反而失去了基本的解决问题的思路。

    • cheery says:

      干技术久了 出现问题总会在技术中查找问题 却往往忽略了外部或者硬件造成的影响 和没有打开电源 却一个劲的以为是电脑坏了 是差不多的道理 可是 专家 这个专家太牛了 洞察力 综合能力不是一般的强

      • 阿宝 says:

        很受启发,有时问题解决不了的时候,不要再一棵树上吊死,需要多跳跃性思维。

        • huyang says:

          这种系统排错方法基于:1、故障不会造成很大的破坏,2、它的发生频率可期待!否则,这种方法是无效的,它所提示的问题在于,系统出错的原因可能是由于大家普遍认为的系统之外的原因造成的!

  5. ppretender says:

    从地板变形关联到系统崩溃。。。

  6. jaord says:

    这种专家只是个传说

  7. windy says:

    不错的故事~~

  8. 崔冉 says:

    做技术的可能会一直偏向技术去思考问题,但现实不是这样。呵呵。受益匪浅。

  9. 青岛建站 says:

    呵呵,真的是一个好例子,遇到问题要从常理角度考虑,不要死钻技术啊

  10. 哇,真是与众不同啊

  11. haitao says:

    才重复3次就能发现这样的问题?6个小时的人和事情,总会有很多可能不正常的吧,都能放过?

  12. 四不象 says:

    这个故事和传说中的扫地老太太有什么区别

  13. xinxin9509 says:

    呵呵,真是一个很有启发性的故事

  14. biglynx says:

    跟那个一锤子多少美元的专家差不多啊 。

  15. 世态炎凉 says:

    这。。。就是传说中的砖家呀。。。

  16. muckenberger says:

    我曾遇到一个BUG,我们把一个蓝牙适配器整合进了一个SD卡,当把这块SD卡插入条码扫描器时,扫描器就可以使用蓝牙了。

    但不久后客户报告说,当SD卡被拔出时,软件崩溃。

    于是我就检查,崩溃是由于硬件被移除后写入数据无效导致的,这是由于当硬件被拔出时我们没有收到操作系统的通知,操作系统通知是由扫描器上的SD卡读卡器发出的,读卡器通过上面的一个簧片发出一个上升沿电平来通知系统,簧片是被一个弹簧支撑着的,我发现弹簧断了。

    我回信,请换弹簧。

    于是问题解决了。

    你们看我算专家吗。

    • admin says:

      呵呵,这个吗 。。。

    • mic says:

      你当然算专家,但相对来说你的故事没有原文故事那么精彩,道理很简单,你那个问题可以先换卡解决,然后仔细看看故障卡应该能猜到再找到毛病并修复;而原文故事条件有限,处理难度比你的大的多的多,你觉得呢。

  17. std::cerr says:

    听起来确实象个传说。

  18. 弘石 says:

    冰淇淋与汽车的故事更有趣一些

  19. 李勃 says:

    这种级别的问题,我有这个能力做到找出原因来

  20. 远志 says:

    这个真的是专家,技术精通到一定程度还能挑出条条框框的限制来看问题,扫地老太能发现问题是靠运气。

  21. froest says:

    这才是真正的砖家

  22. Atlantis12000 对这篇文章的反应是俺的神呀
  23. 爱吃糖葫芦  这篇文章
  24. B.C.H 对这篇文章的反应是笑死了
  25. B.C.H says:

    由于静电干扰引起的误码不是固定在特定的情况下发生在的,文章写的可象安徒生的通话呀~~,小便行文宜提高点技术含量哦。

  26. 植物游 says:

    关键是这个问题可以重现,哈哈

  27. zyw says:

    公司派出了技术人员。技术人员尽了他最大的努力也不能在测试环境复制出这个问题:这个问题似乎只会出现在打印大量任务的过程中

    很多问题不到现场是没办法发现问题的?

发表评论

电子邮件地址不会被公开。 必填项已用*标注