Categories

CPU 风扇的问题

tuxfan在上次讲调试的小课堂里我曾经提到过我前一阵子遇到过一个 Matlab 的问题,具体症状是,开启 Matlab 来做计算,过了大约一天以后,再去看,就会发现系统处于完全无响应的状态,完全挂掉了,键盘有一个灯在闪烁。

碰到了好几次之后我相当崩溃,这个 bug 几乎处于不可调试的状态,首先要重现 bug 就很麻烦,虽然几乎都能重新,但是我不可能一直坐在那里盯着屏幕等一天(具体需要几个小时来重现我也不太清除),而且 bug 出现之后系统会挂掉,唯一的办法是强制重启,这个时候所有现场都被销毁了。另一方面,阅读代码的必杀技也没法用,因为我的程序是一段不长的 Matlab 代码,在这样的脚本语言里,内存都是自动管理的,我能想到的危害最大的操作大概就是申请超大内存了,一般会有两个结局:如果 swap 空间还能承受得了的话,会使用 swap 空间,并导致系统奇慢无比,不过并没有挂掉;如果 swap 空间都不够用了,那么 Linux 系统会把这个进程 kill 掉,而不是同归于尽。总的来说,不太可能是这段 Matlab 脚本导致了这么严重的问题,如果真有问题的话,估计是出在 Matlab 了,并且还是非常强悍的 bug ,会让系统彻底挂掉。

最近我终于发现了问题的原因(应该是这个原因吧),之所以发现应该是完全处于运气好,或者说之所以一直没有发现真正原因也是由于运气不好吧。事实证明,我在小册子里列的 7 Golden Rules of Debugging 里的第四条“检查电源是否插好”确实也是非常重要的。因为这里的问题就在于这样的和代码本身并无关系的外部原因——在大多数情况下都不会出现的异常外部情况(比如电源没有插上)。

我这里的问题是 CPU 风扇挂掉了。所以计算量过大的时候 CPU 过热,导致系统挂掉了。我之所以发现是因为那天我碰巧目睹了这个 bug 发生,于是我重启了电脑,结果屏幕上不断闪现 CPU 过热的错误信息,我打开机箱一看,才发现风扇不转了。而以前之所以没有发现,是因为我都是把程序启动起来,过了很久过来看,系统挂掉了,这个时候通常是已经挂掉很久了,CPU 也已经冷却了,再重启的时候就没有出现错误了。 :-/

解决问题的办法嘛,把灰尘清理了一下,然后暴力把风扇脖子使劲拧了几下,它终于吭哧吭哧地开始转了,不过看起来总是很吃力的样子,虽然冬天到了,不过估计还是应该抽空换一个了。

其实这个问题我应该很早就发现才对!因为最近一段时间感觉那个电脑的发热量变得很大,坐在旁边感觉比以前热很多,但是似乎这样一个信息被我自动无视了。看来,真的是要对生活中出现的异常情况保持敏锐的嗅觉才行啊,不能太迟钝了。 😀

7 comments to CPU 风扇的问题