如何收到 Linux 中的 ECC 错误通知?

如何收到 Linux 中的 ECC 错误通知?

当配备 ECC 内存的 Linux 机器识别到内存故障时,我如何收到通知?我对可纠正和不可纠正的错误都感兴趣。

  • 如果将消息写入 dmesg/syslog,这已经很好了,但我很想知道要查找什么
  • 可以安装其他守护进程(如硬盘的 smartmontools)
  • Nagios/Icinga 监控是另一种方式
  • 并非所有要监控的机器都具有 IPMI

感兴趣的系统有 Supermicro 主板 (X9SCM-F),关于 HP N54L Microserver,我只是好奇,但不太在意。所有系统都运行 Debian 或 Ubuntu Linux。

答案1

Linux 内核支持错误检测和纠正(欧共体数字咨询委员会) 某些芯片组的功能。在支持的系统上椭圆曲线您可以通过 sysfs 访问内存控制器的状态:

/sys/devices/system/edac/mc

该位置下的目录树应与您的硬件相对应,例如:

/sys/devices/system/edac/mc/mc0/csrow2/power
/sys/devices/system/edac/mc/mc0/csrow0/power
/sys/devices/system/edac/mc/mc0/dimm2/power
/sys/devices/system/edac/mc/mc0/dimm0/power
/sys/devices/system/edac/mc/mc1/power
...

根据您的硬件,您可能必须明确加载正确的 edac 驱动程序,参见:

find /lib/modules/$(uname -r) -name '*edac*'

edac-utils包裹提供命令行前端和用于访问数据的库,例如:

edac-util -rfull          
mc0:csrow0:mc#0memory#0:CE:0
mc0:csrow2:mc#0memory#2:CE:0
mc0:noinfo:all:UE:0
mc0:noinfo:all:CE:0
mc1:noinfo:all:UE:0
mc1:noinfo:all:CE:0

您可以设置某种 cron-job,定期调用eac-util并将结果提供给您的监控系统,然后您可以在其中配置一些通知。

除此之外,跑步mcelog通常是一个好主意。取决于系统,但不可纠正/可纠正的 ECC 错误可能会被报告为机器检查异常(麦考林) 也是如此。我的意思是,即使由于温度较高而导致的短暂 CPU 节流也会被报告为 MCE。

答案2

正如另一位发帖者提到的那样,mcelog它已被弃用并被有效取代rasdaemon。我做了一个写上去关于如何在多个 Linux 发行版上安装和配置它,包括正确设置 DIMM 标签的说明。

答案3

mcelog将监控内存控制器和报告内存错误事件到系统日志,并且在某些配置中可以脱机坏内存页面。当然,这除了通常用于监视机器检查异常和各种其他硬件错误之外。

大多数 Linux 发行版都设置了服务以将其作为守护进程运行,例如 EL 6:

chkconfig mcelog on
service mcelog start

答案4

这取决于您的服务器硬件。白盒或 Supermicro 系统处理这个问题的方式与戴尔、惠普或 IBM 不同...

高端服务器的增值功能之一是具有一定程度的硬件/操作系统集成。更优质的服务器会将您正在寻找的内容作为管理代理和/或带外管理解决方案(ILO、DRAC、IPMI)的一部分进行报告。

您应该使用适合您的硬件平台的工具。

摘自运行 Linux 和 HP 管理代理的 HP ProLiant 服务器:

Trap-ID=6056
ECC Memory Correctable Errors  detected.

Trap-ID=6052
Advanced ECC Memory  Engaged

或更严重的

Trap-ID=6029
A correctable memory log entry indicates a memory module needs to be
replaced.

或者最糟糕的情况是……忽略错误 6 天,直到服务器因 RAM 故障而崩溃

0004 Repaired       22:21  12/01/2008 22:21  12/01/2008 0001
LOG: Corrected Memory Error threshold exceeded (Slot 1, Memory Module 1)

0007 Repaired       02:58  12/07/2008 02:58  12/07/2008 0001
LOG: POST Error: 201-Memory Error Single-bit error occured during 
memory initialization, 
Board 1, DIMM 1. Bank containing DIMM(s) has been disabled.

0008 Repaired       19:31  12/08/2009 19:31  12/08/2009 0001
LOG: ASR Detected by System ROM

这些都已被记录,另外还发送了 SNMP 陷阱和电子邮件。

一般来说,你会在内核环形缓冲区中看到机器检查异常,因此你可以检查dmesg或运行麦克洛格在我使用没有 IPMI 的 Supermicro 设备的经验中,它并没有捕捉到所有的东西,我仍然会遇到 RAM 错误并导致停机。不幸的是,这导致了过时的 RAM 老化政策在系统部署之前。

相关内容