Zhr*_*hro 5 linux memory centos ecc redundancy
我运行的服务器刚刚遇到了我以前从未遇到过的错误。它发出几声哔哔声,重新启动,并卡在启动屏幕(BIOS 显示其徽标并开始列出信息的部分)并出现错误:
节点 0:DRAM 不可纠正的 ECC 错误
节点 1:HT 链接同步错误
硬重置后,系统启动正常,但尚未在 edac-util 上报告任何内容。
我的研究告诉我,即使 ECC 内存和系统处于理想状态,仍然可能出现无法纠正的错误,并且可能会在系统的生命周期中的某个时刻发生;一些报告建议至少一年或更早一次。
该服务器运行带有多个 ECC 模块的 CentOS 6.5。我已经在尝试诊断哪个模块引发了错误,以评估这是错误还是不可避免的结果,例如宇宙射线。
我的研究还表明,当系统像这样停止时,日志无处可写,唯一可靠的方法是将系统连接到另一个系统,并通过串行端口写出日志。
除了通常的 edac-util、memtest、压力测试和预防性更换之外,在解决这个错误时还有什么我应该考虑的吗?
我无法在我搜索的任何 CentOS 日志中找到此崩溃的任何记录,这与我的信念一致,即无法将此错误记录到本地磁盘。该错误仅在自动重启后由 bios 报告给我。是否建议始终将系统日志写入串行以记录这些类型的错误?
使用单个系统可以避免这种故障,还是只能使用昂贵的企业解决方案才能避免?
在这些故障情况下,我可以做些什么来为单个生产服务器提供回退措施;例如,生产服务器本身不会跨越多台机器,但可以存在后备服务器。
这是我如何阻止系统崩溃的答案,但没有解决最初的问题。我仍在研究解决方案,并将分享我学到的任何新信息。
该系统是一个白盒,配有 Supermicro H8SGL-F 主板、64GB (16x4) Hynix、32GB (16x2) Viking 内存。主板规范规定,由于处理器使用四通道内存控制器,因此 RAM 模块必须以四个为一组安装。我将额外的两个 Viking 模块放入其中,看看它是否有效,而且确实有效。这个解决方案工作了几个月,但这是我的第一个错误。
我的第二个错误是我错误地安装了内存。内存插槽采用颜色编码并交错排列,用于四通道设置。我的内存是这样安装的:
[ ========== ] 16GB Hynix
[ ---------- ] 16GB Hynix
[ ========== ] 16GB Hynix
[ ---------- ] 16GB Hynix
[ ========== ] 16GB Viking
[ ---------- ] 16GB Viking
[ ========== ]
[ ---------- ]
Run Code Online (Sandbox Code Playgroud)
虽然此设置确实工作了几个月,并且最近才开始产生问题,但我无法确定该故障是否是由于容量增加导致我的不合规布局问题(模块是否确实存在问题)。
由于我只有一个生产系统,因此我移除了所有模块并开始将它们以两个为一组轮换(仍然不符合规格),并以降低的容量运行系统数周。我没有收到任何崩溃,也没有来自 edac-util 的 ecc 错误报告。但是,有可能有故障的模块位于第二个插槽中并且只是未被访问,从而导致故障。
旋转内存后未能重现该错误,我意识到我错误地设置了内存。我删除了 Viking 模块并设置了新的布局,如下所示:
[ ========== ] 16GB Hynix
[ ---------- ]
[ ========== ] 16GB Hynix
[ ---------- ]
[ ========== ] 16GB Hynix
[ ---------- ]
[ ========== ] 16GB Hynix
[ ---------- ]
Run Code Online (Sandbox Code Playgroud)
自从我进行此更改后,系统保持稳定。尽管符合规范,但这并不能确认故障是否出在布局、Viking 模块(因为它们已被删除),或者有问题的模块是否只是布局中较靠下的 Hynix 模块之一,而访问频率不够高无可挑剔。
请将此答案视为问题的结论,而不是我为解决总体问题而采取的步骤。我还没有完成,将在继续寻找解决方案时继续报告。
另外值得注意的是,自从我将内存设置为新布局以来,系统昨天第一次重新启动。我无法确认这是否是由于正在解决的内存问题造成的,或者这是否是电源的单独问题,因此到目前为止,对这一事件持保留态度。