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

Jen*_*rat 29 linux ecc

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

  • 如果将消息写入 dmesg/系统日志,这已经很好了,但我很想知道要查找什么
  • 安装额外的守护进程(如用于硬盘驱动器的 smartmontools)是可以接受的
  • Nagios/Icinga 监控将是另一种方式
  • 并非所有要监控的机器都有 IPMI

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

小智 11

正如另一张海报所提到的,mcelog已被弃用并被有效取代rasdaemon。我写了一篇关于如何在许多 Linux 发行版上安装和配置它的文章,包括正确设置 DIMM 标签的说明。


Mic*_*ton 10

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

大多数 Linux 发行版都设置了一个服务来将其作为守护程序运行,例如对于 EL 6:

chkconfig mcelog on
service mcelog start
Run Code Online (Sandbox Code Playgroud)

  • Ubuntu 不再支持。安装出现错误。 (2认同)
  • 发布问题的人说“所有系统都运行 Debian 或 Ubuntu”,而您的回答对此不起作用。所以这很重要...... (2认同)

max*_*zig 9

Linux内核支持的错误检测和校正(EDAC一些芯片组的)功能。在支持ECC的系统上,可以通过 sysfs 访问内存控制器的状态:

/sys/devices/system/edac/mc
Run Code Online (Sandbox Code Playgroud)

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

/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
...
Run Code Online (Sandbox Code Playgroud)

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

find /lib/modules/$(uname -r) -name '*edac*'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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


eww*_*ite 8

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

高端服务器的增值功能之一是硬件/操作系统集成水平。更好的服务器将报告您要查找的内容,作为管理代理和/或带外管理解决方案(ILO、DRAC、IPMI)的一部分。

您应该使用硬件平台原生的工具。

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

Trap-ID=6056
ECC Memory Correctable Errors  detected.
Run Code Online (Sandbox Code Playgroud)

Trap-ID=6052
Advanced ECC Memory  Engaged
Run Code Online (Sandbox Code Playgroud)

或更严重的

Trap-ID=6029
A correctable memory log entry indicates a memory module needs to be
replaced.
Run Code Online (Sandbox Code Playgroud)

或者最坏的情况...忽略错误 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
Run Code Online (Sandbox Code Playgroud)

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

通常,您会在内核环形缓冲区中看到 Machine Check Exceptions,因此您可以检查dmesg或运行mcelog。在我使用没有 IPMI 的 Supermicro 设备的经验中,这并没有解决所有问题,而且我仍然有 RAM 错误从裂缝中溜走并导致中断。不幸的是,这导致了在系统部署之前过时的 RAM 老化策略


spa*_*iff 6

rasdaemon包被创造作为替代edac-tools,而新的内核甚至不支持edac-toolsmcelog

在EDAC Linux内核驱动程序的更新改变了内存错误计数器是如何在用户空间的管理,所以edac-toolsmcelog有效地弃用。

  • @gabriele 整理的 `rasdaemon` [文章](https://www.setphaserstostun.org/posts/monitoring-ecc-memory-on-linux-with-rasdaemon/) 非常全面。 (2认同)