2008-10-05 40 views
3

我有几百台运行应用程序的电脑。在一台计算机上,我看到两个单一位的实例在我从SQLite中拔出的某些字符串上被错误设置。如果这是我的开发计算机,我会认为我有一个地方的错误,但肯定有一些安装在哪一点上,我会开始看到罕见的硬件错误。硬件相关磁盘或内存损坏的可能性?

这当然取决于我做了多少IO,但有没有什么经验法则可以看到这种事情?例如,对于TCP数据包,this paper确定沉默,未检测到的损坏将发生在“大约1/1600万到100亿个数据包”中。

不幸的是,在有问题的机器上运行mem/disk检查器不太可能发生。

回答

4

当我看到奇怪的事情发生了,我的策略是:

  1. 检查,如果有一个bug 代码
  2. 检查是否有在使用的库/工具的错误(SQLite的,这里)
  3. 检查如果在编译器中的错误
  4. 然后,只有到那时,检查硬件故障

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

希望这会有所帮助。

+1

如果在定制的操作系统上工作,还应该添加检查驱动程序或IO控制器。 – Quibblesome 2008-10-05 16:46:57

+1

很好的建议!幸运的是,通过简单地切换测试硬件并查看故障是否发生移动,硬件故障更容易排除。如果硬件不够完善,而且仍然失败,那么很有可能不是硬件。 – 2011-06-10 11:37:11

0

带有微妙的错误,它可以随时发生,并从几个来源,甚至most unlikely

正如您可以看到单台机器上发生的错误,您的最佳选择是处理损坏,而不是依靠统计数据告诉您什么时候出现问题。虽然错误可能是由于外部因素造成的,但如果您看到多个错误,那么让计算机上运行的memchecker检查其硬件是否有问题将是明智之举。另一种选择是相信运气,你不会看到彻底的失败。

2

会发生误码。考虑使用CRC或其他某种错误检测/纠正机制来保护您的数据。它发生的可能性取决于你有什么样的硬件。如果您拥有ECC的内存,那么它的可能性会比不如例如,但即使ECC内存不佳也可能无法纠正错误。有数百台电脑,我会说奇怪的硬件错误很可能会发生,可能是肯定的,每天都会发生。

1

"Wikipedia: ECC memory" 说 “最近的DRAM测试给广泛变化的错误率超过7个数量级的差别,范围从10^-10〜10^-17错误/位·h时,大致一个比特错误,每小时,每千兆字节的内存到一位错误,每个世纪,每GB的内存。[7] [11] [12]“

即使我们使用每个世纪每千兆字节一个位错误的最乐观估计,有一组100台计算机,每台计算机有2 GB的内存,这意味着每年会出现两次错误。 (这只包含RAM位错误,您提到TCP数据包未检测到损坏,您可能还会考虑磁盘驱动器故障,意外拔掉电源线,冷却风扇故障等)。 更悲观的估计意味着你会更经常地看到位错误 - 就像Steve Baker所说的那样,有点错误是不可避免的。

0

将机器切换出。在我现在的位置(〜7年),我看到过一次由硬件内存错误导致的蓝屏。如果您在同一台计算机上看到两次错误失败,那么您很有可能找到了罪魁祸首。在同一段时间,我看到数十个磁盘控制器故障/磁盘故障/注册表损坏蓝屏。所以他们很少见,但他们确实发生。

在网络方面,我们有一个情况下一个3D第三方供应商的广域网压缩设备是我们的应用程序的TCP数据包压缩在一起,不正确的,然后把好的CRC就可以了。这至少可以说是一场浩劫。