当我注意到奇怪的事情发生时,我的策略是:
在我10年的职业生涯中,99.99%的错误都与软件相关。
希望这能帮到您。
比特错误是会发生的。考虑使用CRC或其他错误检测/纠正机制来保护您的数据。发生这种情况的概率取决于您使用的硬件类型。例如,如果您使用带有ECC的内存,则比不使用ECC的内存更不容易出现错误,但即使是ECC内存也会出现故障并可能无法纠正错误。如果您有几百台计算机,我会说奇怪的硬件错误很可能每天都会发生,甚至可以说是肯定会发生。
"维基百科:ECC内存"表示:“最近的DRAM测试显示错误率差异很大,误差范围在10^-10到10^-17错误/位·小时之间,大致相当于每千兆字节内存每小时一个比特错误到每个世纪每千兆字节内存一个比特错误。”[7][11][12]
即使我们使用最乐观的估计,即每个世纪每千兆字节内存一个比特错误,如果您有100台计算机,每台计算机配备2GB RAM,则意味着您将每年看到两次比特错误。(这仅包括RAM比特错误。您提到了TCP数据包未检测到的损坏,您还可以考虑硬盘驱动器故障、意外断电、冷却风扇故障等)。更悲观的估计意味着您会更频繁地看到比特错误--正如Steve Baker所说,比特错误是不可避免的。
把那台机器换掉。在我目前的职位(约7年)中,我只见过一次由硬件内存错误引起的蓝屏。如果你在同一台机器上看到两次位错误故障,很有可能你已经找到了罪魁祸首。在同一时期,我见过数十次磁盘控制器故障/磁盘故障/注册表损坏的蓝屏。所以它们很少见,但确实会发生。
在网络方面,我们曾经遇到过一个情况,即第三方供应商的WAN压缩设备将我们的应用程序TCP数据包错误地压缩在一起,然后放置一个正确的CRC。这造成了极大的混乱。
由于微小的错误可能随时发生,而且可能来自多个来源,甚至是最不可能的。
正如您所看到的,在单台计算机上发生错误,您最好的选择是处理损坏,而不是依靠统计数据告诉您什么时候可能出现问题。虽然错误可能是由外部因素引起的,但如果您看到了不止一个错误,最好在计算机上运行memchecker以检查其是否存在故障硬件。另一种选择是相信运气,希望您不会看到完全失败。