问题

工位电脑在正常使用过程中,随机经过几十分钟到几小时后会出现如下图所示的蓝屏。

排查过程

第一步:脑补分析

从蓝屏的终止代码来看,很可能与内存有关。联想到前一天刚请 IT 同学加装了 2 根内存条用于扩充生产机器的内存,初步怀疑是新内存带来的问题。

第二步:瞎猜并验证

最初猜测是内存频率和时序不匹配。机器共有 4 根内存条,其中 3 根是 3200MHz,1 根是 2600MHz。于是先取下 2600MHz 那根,继续正常使用一段时间后,蓝屏依然出现,排除了频率不匹配的可能。

第三步:再猜,然后写代码验证

继续猜测,可能是某根内存条的某个地址位损坏了。考虑到蓝屏复现时间长且随机,于是用 C++ 写了如下程序:逻辑是持续申请内存并写入数据,以尽快触发有问题的内存地址。

第四步:二分法定位

4 根内存条中,选取 2 根插在同一个双通道插槽上,开机运行上面的程序,通过二分法快速找出有问题的那根。

结果

折腾了十几分钟,成功定位到问题内存条,随即找 IT 同学换掉了。最终揪出来的就是下图这货。

最后,二分大法赛高!