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 也常被同时使用,两者并存时注意不要重复告警。
记录中包含物理地址等机器信息:对外提交日志前按内部规范做脱敏,避免把主机名、序列号直接外发。