世界上经典的Bug

麻省理工的邮件只能发500公里Bug

据说麻省理工的一个系统管理员接到统计系的系主任求助电话,电话里说“咱们的邮件系统无法发送距离500英里以外的地方,准确地说好像是520英里”
估计任何程序员接到这个bug是蒙的,还有这个限制,经过痛苦漫长的测试,发现邮件服务器操作系统(Sun OS)被升级了,而操作系统上默认配置的软件一般都比较旧,邮件软件被降级了从Sendmail 8降级到SendMail 5,这样SendMail 5 尝试去解析SendMail8 的配置文件导致问题。
为什么是500英里那,大神解释如下:

SendMail 5对识别不了的配置,都会忽略,没有配置的配置项默认为0,其中有一个参数是链接远端SMTP服务器的超时世界,经过实验,发现0秒的超时时间,会导致SendMail再3毫秒后中断链接。
而学校当时没有这么多路由器,网络延迟也小,连一台远程主机的时间大概为光所需时间,于是3毫秒,可以连接最远主机的距离为:
0.00331080.0010.621 = 558英里

星期三Bug

一家医院用来监控病人监控的数据库,每到周三,就会崩溃。
意味着一周只有一次debug机会。

原因最后查出是该程序日志记录是C风格代码编写,日志记录字符串固定再缓冲区中,而周三的英文字母比其他天长了一个字节,导致缓冲区溢出。

靠窗产生的Bug

据说有个程序员再设计SD卡控制器写驱动,从五月开始调试,一直很顺利,到7月份突然开始出现间歇性的SD卡,读写失败的问题,而且越靠近窗口,失败的频率越高。
幸好我没遇到,我遇到估计都会开始怀疑人生了,这算是怎么回事?

原因是电路板上的芯片正常工作温度有限,超过这个温度,它就工作不正常了,7月的正午,太阳会投过窗户照在板子上,导致温度过高,My God!

单比特翻转错误

这个是从极客时间的深入计算机组成原理上看到的,徐文浩老师当时再组建一个hadoop的大集群,那时候云还没有这么普及,需要自己组建数据中心,为了节省成本,购买普通的硬盘和普通的内存,结果有一次出现了小时报表长时间无法生产的问题,有几个节点计算错误,重算后又成功了,导致出报表的时间太长,进一步发现有些错误非常奇怪,比如结果应该是57的得到的结果确是$,而出错的机器固定到新增加的几台普通内存的机器上,注意到57和$的ascii:


image.png

作者翻遍了Hadoop的资料最终推测因为内存的错误,单比特翻转造成(我记得曾经看到过谷歌大神调试遇到过这个错误), 换成具有纠错功能的(ECC)内存条,问题再也没有出现过。

所以如果有解决不了的bug,大胆地推给硬件吧,哈哈哈哈!

祝大家开发无bug:)

你可能感兴趣的:(世界上经典的Bug)