メモリエラーをソフト不具合と勘違い『ハードウェアの話④』
アプリが突然落ちる。
サービスが不定期に再起動する。
ログにはスタックトレース、セグフォ(Segmentation Fault)、OOM…
多くの初学者は 「アプリが悪い」 と考えるが、
実際の原因は メモリ(RAM)の物理故障 というケースもある。
ソフト不具合に見える挙動の裏に、
ハードの“静かな破損”が潜んでいる典型例。
ひと言まとめ
アプリが落ちる=ソフト不具合、とは限らない。
メモリエラーは「壊れ方がソフトに似ている」ため気づきにくい。
症状(あるある)
アプリが不定期に落ちる(再現性が低い)
Java/Python/DB などが“たまに” Segmentation Fault
OSが突然リブートする(ログが途中で途切れる)
カーネルパニック(Kernel Panic)が月1〜数回
dmesg に EDAC, MCE, memory corruption の記録
仮想マシンだけ不安定でホストは問題ない
フルスキャン・バックアップ時にだけエラーが出る
原因と仕組み(なぜ起きる?)
メモリモジュール自体の物理破損
ECCメモリの 訂正不能エラー が発生
メモリスロット不良・接触不良
高温環境での長期運用による劣化
「アプリ不具合」に見えるため調査がOS/アプリ寄りになりがち
BMCのメモリエラー通知に誰も気づかない
図:メモリエラーは“アプリの動作領域”を壊す
[アプリ領域]
├── 正常メモリ:問題なし
└── 壊れた領域:読み書き時にセグフォ・異常終了
切り分け(最短コース)
dmesg / syslog を確認
dmesg | grep -Ei "mce|edac|memory|corrupt"
BMC(iLO/DRAC)ログ確認
→ “Memory Correctable/Uncorrectable Error” の有無memtest を実施
→ 最も確実(可能ならメンテ時間を確保)DIMMスロットの情報確認
→ どのバンク/どのスロットで発生しているか負荷時の挙動確認
→ バックアップなど読み書きが多いと頻発する
今すぐ効く対処(テンプレ)
エラーの出ている DIMMを特定して交換
スロット接触不良の場合は挿し直し(ただし再現性は低い)
BMCアラートを有効化し通知を整備
メモリ増設の際は 同容量・同速度・同ロット を基本に
ECC付きサーバでは必ず ECCログを監視対象に追加
恒久対策/再発防止チェックリスト
BMCのメモリエラーをメール+Slack通知へ
OSログ(EDAC/MCE)を監視ツールで収集
月次点検でメモリ訂正回数(Correctable)をレビュー
増設時に混在構成を避ける(同一メーカー推奨)
高温環境に置かない(ラック前面塞ぎに注意)
予備メモリを常備し、交換作業を標準化
カーネルパニック時は「まずハード」を疑う文化を定着
落とし穴(やりがちミス)
アプリのクラッシュログばかり追う
再現しないため“様子見”で放置(危険)
Correctable(訂正可能)エラーを軽視
メモリを片側だけ交換して逆に不安定化
物理メモリ不足と誤認し増設してさらに混在構成に
変更後の確認ポイント
dmesg/MCEログが再発していない
BMCアラートがクリア
カーネルパニックが消滅
アプリが安定稼働(突然終了がない)
memtestが正常終了
まとめ(行動指針)
メモリエラーは、最も“ソフトっぽく見える”ハード故障。
だからこそ、多くの人が原因に気づかない。
カーネルパニック・セグフォ・アプリ突然死 → まずメモリを疑う。
これを習慣化するだけで、
トラブル対応のスピードも、サーバの安定性も大きく変わる。
