当配备 ECC 内存的 Linux 机器识别出内存故障时,我如何获得通知?我对可纠正和不可纠正的错误都感兴趣。
- 如果将消息写入 dmesg/syslog,这已经很好了,但我很想知道要查找什么
- 安装额外的守护进程(如用于硬盘的 smartmontools)是可以接受的
- Nagios/Icinga 监控将是另一种方式
- 并非所有要监控的机器都有 IPMI
感兴趣的系统有 Supermicro 板 (X9SCM-F),关于 HP N54L 微型服务器,我只是好奇,但不要太在意。所有系统都运行 Debian 或 Ubuntu Linux。
Linux 内核支持某些芯片组的错误检测和纠正 ( EDAC ) 功能。在带有ECC的受支持系统上,可以通过 sysfs 访问内存控制器的状态:
该位置下的目录树应与您的硬件相对应,例如:
根据您的硬件,您可能必须显式加载正确的 edac 驱动程序,参见:
该
edac-utils
软件包提供了一个命令行前端和一个用于访问该数据的库,例如:您可以设置某种 cron-job 定期调用
eac-util
并将结果提供给您的监控系统,然后您可以在其中配置一些通知。除此之外,跑步
mcelog
通常是一个好主意。取决于系统,但不可纠正/可纠正的 ECC 错误也可能报告为机器检查异常 ( MCE )。我的意思是,即使是由于温度升高而导致的短暂 CPU 节流也被报告为 MCE。mcelog
将监视内存控制器并向 syslog报告内存错误事件,并且在某些配置中可以将坏内存页面脱机。当然,这是除了它通常用于监视机器检查异常和各种其他硬件错误之外的。大多数 Linux 发行版都设置了一个服务来将其作为守护进程运行,例如对于 EL 6:
该软件包
rasdaemon
是作为.edac-tools
edac-tools
mcelog
EDAC linux 内核驱动程序的更新改变了内存错误计数器在用户空间中的管理方式,因此
edac-tools
实际上mcelog
已被弃用。这取决于您的服务器硬件。白盒或 Supermicro 系统处理此问题的方式与戴尔、惠普或 IBM 不同……
高端服务器的增值功能之一是具有一定程度的硬件/操作系统集成。作为管理代理和/或带外管理解决方案(ILO、DRAC、IPMI)的一部分,更好的服务器将报告您正在寻找的内容。
您应该使用硬件平台原生的工具。
运行 Linux 和 HP 管理代理的 HP ProLiant 服务器的摘录:
和
或更严重的
或最坏的情况......忽略错误 6 天,直到服务器因 RAM 损坏而崩溃
这些都被记录下来,另外还发送了 SNMP 陷阱和电子邮件。
通常,您会在内核环形缓冲区中看到机器检查异常,因此您可以检查
dmesg
或运行mcelog。根据我在没有 IPMI 的情况下使用 Supermicro 设备的经验,这并没有解决所有问题,而且我仍然有 RAM 错误从裂缝中溜走并导致中断。不幸的是,这导致了系统部署之前的过时 RAM 老化策略。正如另一张海报所述,
mcelog
已弃用并有效地替换为rasdaemon
. 我写了一篇关于如何在许多 Linux 发行版上安装和配置它的文章,包括正确设置 DIMM 标签的说明。