
こんにちは、キクです。
普段PCを使っている分にはあまり意識しない「ECC」ですが、サーバー環境を構築する上では切っても切れない存在です。
今回は、なぜサーバーにECCメモリが必要なのか、その仕組みとメリットを備忘録として残しておきます。
本記事の内容
それでは、よろしくお願いします。
1. そもそもECCメモリとは何か?
ECCは正式には「Error Correction Code」で、日本語だと「誤り訂正符号」という意味を持つ
その名の通り、データの転送中や保存中に発生した「ビット化け(エラー)」を検出し、自動で修正してくれる技術のこと
一般的なデスクトップPCで使われる「ノンECCメモリ」は、もしデータが化けても気付かずに処理を続けてしまう(あるいは突然システムがクラッシュする)
一方で、ECCメモリの場合は「あ、今データ間違ったな」と気付いて、裏でこっそり直してくる
ECCメモリには、ざっくり以下のような特徴がある
| 項目 | 特徴 |
|---|---|
| 信頼性 | システムのアップタイム(連続稼働時間)が飛躍的に向上する |
| 整合性 | データベースなどの重要なデータが壊れたまま保存されるのを防ぐ |
| 価格 | ノンECCメモリに比べて高価 |
| パフォーマンス | エラーチェックのオーバーヘッドがあるため、ごく僅か(数%程度)に遅くなる場合がある |
2. なぜ「ビット化け」が起きるのか?
「普通に使っていてデータが化けるなんてあるの?」といった疑問も湧いてくるが、以下のような要因でも日常的に発生することがある
宇宙線(中性子)の影響
- 宇宙から降り注ぐ微細な粒子がメモリの素子に当たると、0が1に反転することがある(ソフトエラー)
電気的ノイズ
- 周囲の機器からのノイズ
ハードウェアの劣化
- 長期間の使用による経年劣化
24時間365日稼働し続けるサーバーは、その分これらのリスクにさらされる時間が長いため、対策が必須となる
3. ECCの仕組み(ハミング符号)

ECCメモリでは、実際のデータと一緒に「チェック用のデータ(パリティビットを高度化したもの)」を保存している
1ビットエラー
- 自動で修正して処理を続行(これが最大の強み)
2ビットエラー
- 修正はできないが「エラーが発生した」ことを検出し、システムを安全に停止(パニック/ブルースクリーンを発動し、不正なデータが書き込まれるのを防ぐ)
脇道:パニック / ブルースクリーンがなぜ安全と言えるのか
もし、2ビットエラー(修正不能なエラー)が起きたのに、システムがそのまま動き続けたらどうなるかを想像すると、その理由が見えてくる
1. 「汚染されたデータ」の拡散を防ぐ
メモリ上のデータが「1100」のはずが、エラーで「0000」に変わっていたとする
そのまま動いた場合
- その間違った「0000」を使って計算を行い、最終的にデータベースの値を上書きしたり、顧客への送金金額を書き換えたりしてしまう
- これが一番怖い「サイレントデータコラプション」と呼ばれる状態
パニックした場合
- 「データが壊れているから、これ以上処理しちゃダメだ!」と判断して即座に止まる
- 被害は「メモリ上の未保存データ」だけで済み、ストレージ(HDD/SSD)にあるマスターデータは守られる
2. 「傷口を広げない」ための決断
- 間違ったメモリ値をもとにプログラムが動くと、OSの核心部分(カーネル)を破壊し、本来消してはいけないファイルを削除するような暴走を始めるリスクがある
- 死ぬ(停止する)ことで、最悪の事態(データ破壊・暴走)を回避する
- これがインフラにおけるパニックの役割
3. エラーの記録(ダンプ)を残す
- パニックする際、OSは「なぜ止まったのか」という情報をログやダンプファイルに書き残す
- 「黙って間違える」のではなく、「ここで、こういうエラーで止まりました」と潔く散ることで、我々エンジニアが後から原因を特定し、ハードウェア(メモリ)の交換作業などの対策を打てるようになる
4. まとめ:どんな時に使う?
迷わずECCを採用すべきケース
1. 24時間365日の連続稼働を前提とするシステム
- メモリのエラー(ソフトエラー)は、稼働時間が長ければ長いほど発生確率が統計的に上がる
- 「いつか必ず起きる」ものとして、自動修復(ECC)を組み込むのが鉄則
2. データベースや会計システム
- 1ビットの反転が「金額の桁違い」や「データの整合性破損」に直結する
- エラーでシステムが止まることよりも、「間違ったデータが保存され、後から不整合が発覚する」ことの方がビジネス上のダメージは甚大
3. リモート設置や無人拠点のサーバー
- エラーでフリーズした際に、物理的なリセット(電源の抜き差し)が容易でない環境では、自律回復できるECCの価値がより高まる
非ECC(またはオンダイECCのみ)で妥協できるケース
1. 開発・検証環境
- データが壊れてもバックアップから作り直せば済む、あるいは一時的に停止しても業務に支障がない場合
2. 一般的な事務用・クリエイティブ用PC
- メモリの不具合によるブルースクリーン(BSOD)が起きても、PCの再起動で許容できる範囲
3. 最新のDDR5搭載機での「カジュアルな運用」
- DDR5の「オンダイECC」は、チップ内部の微細化によるエラーをカバーしてくれる
- 従来のECCほど鉄壁ではないものの、一昔前のノンECCメモリよりは信頼性が向上しているため、個人のハイエンドPCならこれで十分と言える
専門用語辞典
ビット化け
- デジタルデータの最小単位である「0」が「1」に、あるいはその逆に意図せず入れ替わってしまう現象
ソフトエラー
- ハードウェアが物理的に壊れたわけではなく、一時的な要因(宇宙線など)でメモリの内容が書き換わってしまうエラー
- 再起動すれば治るが、データ不整合の原因になる
ハミング符号
- ECCでよく使われる数学的なアルゴリズム
- データのビット構成から特定の計算式でチェック値を生成する
オンダイECC
- DDR5メモリから採用された機能
- メモリチップ内部でエラー訂正を行うが、CPUまでの転送経路上のエラーは保護できないため、従来のサーバー用ECCとは別物として考える必要がある
サイレントデータコラプション
- ストレージやメモリ内のデータが破損しているにも関わらず、システムがエラーを検知できず、誤ったデータを正常なものとして処理を続ける現象