Вероятность повреждения аппаратного диска или памяти?
У меня есть несколько сотен компьютеров с приложением. На одном компьютере я видел два случая неправильной установки одного бита для некоторых строк, которые я извлекаю из SQLite. Если бы это был мой компьютер разработчика, я бы предположил, что у меня где-то есть ошибка, но, безусловно, будет определенное количество установок, и в этот момент я начну видеть редкие аппаратные ошибки.
Это, конечно, зависит от того, сколько IO я делаю, но есть ли какие-то правила, когда есть достойный шанс увидеть подобные вещи? Например, для пакетов TCP в этом документе определено, что молчащее, необнаруженное повреждение будет происходить в "примерно от 1 до 16 миллиардов пакетов".
К сожалению, запуск проверки mem/disk на этой машине вряд ли произойдет.
5 ответов
Когда я замечаю странные вещи, моя стратегия такова:
- проверьте, есть ли ошибка в коде
- проверьте, есть ли ошибка в используемой библиотеке / инструменте (SQLite, здесь)
- проверьте, есть ли ошибка в компиляторе
- тогда, и только тогда, проверьте аппаратные неисправности
За мою 10-летнюю карьеру 99,99% ошибок были связаны с программным обеспечением.
Надеюсь это поможет.
Бит ошибки будут происходить. Подумайте о защите ваших данных с помощью CRC или какого-либо другого механизма обнаружения / исправления ошибок. Вероятность того, что это произойдет, зависит от того, какое у вас оборудование. Если у вас есть память с ECC, то она будет менее вероятной, чем, например, если у вас ее нет, но даже память ECC выходит из строя и может не исправить ошибки. С несколькими сотнями компьютеров я бы сказал, что странная аппаратная ошибка, скорее всего, наверняка произойдет ежедневно.
"Википедия: память ECC" говорит, что "недавние тесты DRAM дают широко варьируемые коэффициенты ошибок с разницей более чем на 7 порядков, в диапазоне от 10^ -10 до 10^ -17 ошибок / бит · ч, примерно одна ошибка в битах в час на гигабайт памяти на одну битовую ошибку, за столетие, на гигабайт памяти.[7][11][12]"
Даже если мы используем наиболее оптимистичную оценку ошибки в один бит на столетие на гигабайт, если у вас кластер из 100 компьютеров с 2 ГБ ОЗУ каждый, это означает, что вы будете видеть ошибку бит два раза в год. (Это включает только ошибку бита ОЗУ. Вы упомянули необнаруженное повреждение пакета TCP, и вы могли бы также рассмотреть сбои дисков, случайное отключение шнура питания, отказы вентилятора охлаждения и т. Д.). Более пессимистичные оценки подразумевают, что вы будете видеть битовые ошибки гораздо чаще - как сказал Стив Бейкер, битовые ошибки неизбежны.
Выключи эту машину. В моей нынешней должности (~7 лет) я однажды видел синий экран, вызванный ошибкой аппаратной памяти. Если вы дважды сталкивались с ошибками на одной и той же машине, вероятно, вы нашли виновника. За тот же период времени я видел десятки сбоев дискового контроллера / сбоя диска / повреждения реестра. Так что они редки, но они случаются.
Со стороны сети у нас был один случай, когда устройство сжатия WAN стороннего производителя неправильно сжимало TCP-пакеты наших приложений, а затем помещало на него хороший CRC. Это сеет хаос, если не сказать больше.
С небольшими ошибками это может произойти в любое время и из нескольких источников, даже самых невероятных.
Поскольку вы видите ошибки, возникающие на одном компьютере, лучше всего обрабатывать ущерб, а не полагаться на статистику, чтобы сообщать вам, когда что-то может пойти не так. Хотя ошибки могут быть вызваны внешними факторами, если вы видели более одного, было бы целесообразно, чтобы этот мемчекер работал на машине, чтобы проверить, что это не неисправное оборудование. Альтернатива - верить в удачу, что вы не увидите полного провала.