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 而系统仍在运行时,应尽快安排停机检查:不可纠正错误意味着数据通路已经出错,继续载业务存在数据被污染的风险。