首页/系统/服务器硬件与 RAID 速查/mcelog 解析机器检查异常
内存与电源72 条

mcelog 解析机器检查异常

MCE(Machine Check Exception)由 CPU 上报:mcelog 服务解析内核记录并落盘,输出中的地址与 DIMM 线索可用于定位故障内存。

mcelog 的作用与用法

MCE(Machine Check Exception)由 CPU 硬件检测并上报,内核会把它写进日志缓冲;mcelog 守护进程的作用是把这些记录持续解析并落盘,形成可以事后回查的硬件错误档案。它的价值在两点:一是内核缓冲会被后续日志冲刷,不落盘就丢;二是它会给出错误类型与地址信息,配合内存映射可以缩小到具体 DIMM。生产服务器上应作为标准组件部署,而不是出事之后临时安装。

基本信息

适用平台x86 平台 Linux(RHEL/CentOS、Ubuntu、SLES 等)
安装方式发行版自带包(RHEL 系为 mcelog)
运行形态守护进程持续收集,支持客户端查询模式
输出位置默认日志文件与系统日志,路径随发行版变化
关键内容错误类型、CPU 与 bank、物理地址、DIMM 提示
配合工具EDAC 统计、BMC SEL、rasdaemon 交叉验证

典型使用场景

  • 服务器出现重启或宕机后,回查是否留下硬件错误记录
  • 内存劣化跟踪:观察可纠正错误是否随时间增长
  • 更换内存前的证据收集,作为报修与工单附件
  • 巡检自动化:定期汇总各机器的错误计数并告警
  • 与新平台替代方案(rasdaemon)并行运行期间的对照验证

安装与查看

安装与查看
# 安装并启用守护进程(RHEL 系示例)
yum install -y mcelog
systemctl enable --now mcelog
# 以客户端模式查询已统计的错误
mcelog --client
# 查看落盘日志中的最近记录
tail -20 /var/log/mcelog
# 与 EDAC 计数交叉核对内存错误
for f in /sys/devices/system/edac/mc/mc*/csrow*/ch*_ce_count; do echo "$f: $(cat $f)"; done 2>/dev/null | head
# 与 BMC 侧事件对照
ipmitool sel elist | grep -iE 'memory|dimm|ecc' | tail -10

输出逐项读法

输出项含义排障用途
事件类型可纠正或不可纠正的错误分类决定紧急程度与处置路径
CPU 与 bank出错的处理器与 bank 编号缩小到某类资源范围
物理地址内存类错误的地址结合内存映射定位 DIMM
DIMM 提示部分版本直接给出候选位置仍需与槽位信息核对确认
时间戳事件发生时刻与业务异常时间线对齐
统计计数累计的错误次数看趋势增长而不是单次数值
不同发行版的包名、服务名与日志路径存在差异:RHEL 系为 mcelog 服务,较新内核环境中 rasdaemon 也常被同时使用,两者并存时注意不要重复告警。
记录中包含物理地址等机器信息:对外提交日志前按内部规范做脱敏,避免把主机名、序列号直接外发。

易错点

  • 不部署守护进程只靠 dmesg:内核缓冲被冲刷后历史记录不可恢复
  • 只看摘要不看细节:地址与 bank 线索被忽略,无法定位到具体部件
  • 只装不纳入巡检:日志无人查看,等于没有采集
  • 把单次可纠正错误当故障:应结合计数增长趋势判断是否换件

数据来源与参考

  • mcelog 项目文档
  • man 8 mcelog
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌