内核里的内存错误线索
内存出现可纠正或不可纠正错误时,内核会通过 EDAC 子系统与机器检查异常机制把消息写进内核环形缓冲区,dmesg 里能看到控制器、通道与 DIMM 的定位字段,这是不拆机就能定位到具体内存条的一手证据。要注意缓冲区会滚动覆盖,重要消息必须及时导出,或者用守护进程持续落库。
基本信息
| 消息来源 | EDAC 子系统与 CPU 上报的机器检查异常 |
|---|---|
| 关键字段 | DIMM 定位、可纠正与不可纠正错误计数、错误地址 |
| 易失性 | 内核环形缓冲区容量有限,旧消息会被覆盖 |
| 落库方式 | 用 rasdaemon 或 mcelog 持续采集 |
| 权限要求 | root |
典型使用场景
- 排查偶发进程崩溃或数据校验失败时找内存线索
- 定位具体是哪一条内存需要更换
- 复盘硬件故障与业务异常的时间关系
- 交付验收时确认没有历史内存错误记录
- 为厂商工单提供内核侧证据
收集证据
收集证据
dmesg -T | grep -iE 'EDAC|Machine check|memory error' | tail -30 # 当前缓冲区里的内存错误
journalctl -k --since '7 days ago' --no-pager | grep -iE 'EDAC|mce' | tail -30 # 从持久化日志回溯
dmesg -T > /tmp/ticket/dmesg.txt # 导出完整证据留档
ras-mc-ctl --errors 2>/dev/null | tail -30 # 装了 rasdaemon 时读汇总消息类型
| 类型 | 含义 | 关注点 |
|---|---|---|
| EDAC 可纠正错误 | 已被纠正,业务未受影响 | 计数持续增长说明内存在劣化 |
| EDAC 不可纠正错误 | 未被纠正,可能影响数据 | 通常需要立即更换并核对业务数据 |
| 机器检查异常 | CPU 上报的硬件异常 | 含错误地址与状态位 |
| DIMM 定位字段 | 控制器通道与内存条编号 | 对应到物理槽位才能换对条 |
dmesg 缓冲区会滚动覆盖,重要消息要尽快导出,或者依赖 rasdaemon 这类守护进程落库。
可纠正错误单次出现可以观察,不可纠正错误通常意味着要立即更换,并回查同一时段业务是否有数据异常。
把错误记录与业务时间线对齐之后再判断影响:同样一次可纠正错误,发生在数据写入窗口内还是空闲时段,处置的紧迫程度完全不同。