硬件相关的磁盘或内存损坏的概率是多少?

3
我有几百台电脑运行一个应用程序。在一台电脑上,我发现从SQLite中提取的某些字符串中有单个位错误地设置了两个实例。如果这是我的开发计算机,我会假设我有一个bug,但肯定有一些安装数量,在那里我会开始看到罕见的基于硬件的错误。 这当然取决于我进行多少IO,但是否有任何经验法则表明出现这种情况的机会很大?例如,对于TCP数据包,这篇论文确定“大约每1600万到100亿个数据包”将发生静默、未检测到的损坏。 不幸的是,在涉及的机器上运行内存/磁盘检查器不太可能发生。
5个回答

4

当我注意到奇怪的事情发生时,我的策略是:

  1. 检查代码中是否有错误
  2. 检查使用的库/工具(如SQLite)是否有错误
  3. 检查编译器是否有错误
  4. 仅在以上步骤无法解决问题时,才考虑硬件故障

在我10年的职业生涯中,99.99%的错误都与软件相关。

希望这能帮到您。


1
如果您正在工作于自定义操作系统上,您还应该添加检查驱动程序或IO控制器的步骤。 - Quibblesome
1
好建议!幸运的是,硬件故障很容易通过简单地更换测试硬件并查看故障是否移动来排除。如果硬件足够不同且仍然失败,则很有可能不是硬件问题。 - Ivan Bohannon
根据我的经验,硬件、磁盘和内存都存在故障的可能性,并非达到99.99%的可靠性。 - user75240

2

比特错误是会发生的。考虑使用CRC或其他错误检测/纠正机制来保护您的数据。发生这种情况的概率取决于您使用的硬件类型。例如,如果您使用带有ECC的内存,则比不使用ECC的内存更不容易出现错误,但即使是ECC内存也会出现故障并可能无法纠正错误。如果您有几百台计算机,我会说奇怪的硬件错误很可能每天都会发生,甚至可以说是肯定会发生。


1

"维基百科:ECC内存"表示:“最近的DRAM测试显示错误率差异很大,误差范围在10^-10到10^-17错误/位·小时之间,大致相当于每千兆字节内存每小时一个比特错误到每个世纪每千兆字节内存一个比特错误。”[7][11][12]

即使我们使用最乐观的估计,即每个世纪每千兆字节内存一个比特错误,如果您有100台计算机,每台计算机配备2GB RAM,则意味着您将每年看到两次比特错误。(这仅包括RAM比特错误。您提到了TCP数据包未检测到的损坏,您还可以考虑硬盘驱动器故障、意外断电、冷却风扇故障等)。更悲观的估计意味着您会更频繁地看到比特错误--正如Steve Baker所说,比特错误是不可避免的。


0

把那台机器换掉。在我目前的职位(约7年)中,我只见过一次由硬件内存错误引起的蓝屏。如果你在同一台机器上看到两次位错误故障,很有可能你已经找到了罪魁祸首。在同一时期,我见过数十次磁盘控制器故障/磁盘故障/注册表损坏的蓝屏。所以它们很少见,但确实会发生。

在网络方面,我们曾经遇到过一个情况,即第三方供应商的WAN压缩设备将我们的应用程序TCP数据包错误地压缩在一起,然后放置一个正确的CRC。这造成了极大的混乱。


如果您在多台计算机上看到了您认为是位错误的情况,不要费心更换计算机 ;) - Ivan Bohannon

0

由于微小的错误可能随时发生,而且可能来自多个来源,甚至是最不可能的

正如您所看到的,在单台计算机上发生错误,您最好的选择是处理损坏,而不是依靠统计数据告诉您什么时候可能出现问题。虽然错误可能是由外部因素引起的,但如果您看到了不止一个错误,最好在计算机上运行memchecker以检查其是否存在故障硬件。另一种选择是相信运气,希望您不会看到完全失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接