首页/系统/服务器硬件与 RAID 速查/MCE 记录字段解读(ADDR/STATUS/MISC)
内存与电源72 条

MCE 记录字段解读(ADDR/STATUS/MISC)

机器检查异常(MCE)日志把 CPU、bank、地址与状态码拆成多个字段:理解 ADDR、STATUS、MISC 与 MCACOD 的关系,才能判断问题落在内存、缓存还是总线。

MCE 记录字段解读

机器检查异常(Machine Check Exception)是 x86 CPU 检测到硬件错误时提交的报告,内核收到后写入内核日志,并可由 mcelog 或 rasdaemon 结构化落盘。一条记录由「哪颗 CPU 的哪个 bank」加 ADDR、MISC、STATUS 等字段组成:STATUS 内含错误码(MCACOD),决定该错误属于可纠正(CE)还是不可纠正(UCE);ADDR 给出内存类错误的物理地址,用来把范围缩小到 DIMM。字段要合起来读,单看某一位很容易误判。

基本信息

适用平台x86_64 服务器(Intel Xeon、AMD EPYC 平台)
记录来源内核 ring buffer、mcelog、rasdaemon、ras-mc-ctl
关键字段CPU / BANK / TSC / ADDR / MISC / STATUS
权限要求root 读取日志与内核缓冲
判定核心CE 可继续观察并记录位置,UCE 需停机处置

典型使用场景

  • 服务器非预期重启或宕机后,确认是否留下过 UCE 记录
  • 巡检发现 CE 计数持续增长,评估是否达到换件或报修条件
  • 内存报错定位:用 ADDR 结合内存映射缩小到具体 DIMM 与通道
  • 与 BMC 的 SEL 事件对照,区分是 CPU 侧还是内存侧先报错
  • 同批次机器横向统计,找出错误率明显偏高的个体

采集原始记录

采集原始记录
# 内核日志中的原始记录,带时间戳,注意上下 3 行上下文
dmesg -T | grep -iE 'machine check|mce' -A 3 | tail -40
# mcelog 客户端模式:查看已解码的 CE/UCE 统计
mcelog --client 2>/dev/null | tail -20
# rasdaemon 环境下的错误清单(含内存条位置信息)
ras-mc-ctl --errors 2>/dev/null | tail -30
ras-mc-ctl --summary 2>/dev/null
# 落盘日志按天轮转,历史事件到这里找
ls -l /var/log/mcelog* 2>/dev/null

常见字段读法

字段含义排障用途
CPU n BANK m第 n 颗处理器、第 m 个 bank把范围缩小到某颗 CPU 的某类资源
TSC时间戳计数器数值配合主频换算事件发生时刻
ADDR出错的物理地址内存类错误用它可以定位到 DIMM
MISC附加信息位(如地址是否有效)确认 ADDR 是否可信、是否与其它记录关联
STATUS状态码,含 MCACOD 位段区分 CE 与 UCE、判断错误类别
MCGSTATUS机器检查全局状态(视版本输出)辅助判断错误是否被成功处理
MCACOD 等位段的具体含义随微架构代际变化:解读时对照该平台处理器的 RAS 文档或厂商解码表,不要拿旧平台的位定义套用到新平台。
出现 UCE 而系统仍在运行时,应尽快安排停机检查:不可纠正错误意味着数据通路已经出错,继续载业务存在数据被污染的风险。

易错点

  • 看到 corrected 就整条跳过:CE 的 CPU、bank 与地址信息正是判断劣化部件的依据
  • 只贴一行日志就下结论:缺少 CPU 编号、bank 与时间上下文时无法排除偶发噪声
  • 把内存类 MCE 当 CPU 故障处理:先按 ADDR 与 bank 归属确认,再决定换条还是换 CPU
  • 不落盘只依赖 dmesg:内核缓冲被冲掉后,历史 MCE 记录不可恢复

数据来源与参考

  • Intel SDM Vol.3(Machine-Check Architecture)
  • Linux 内核 MCE 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌