2008-10-05 81 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就可以了。這至少可以說是一場浩劫。