内存故障分两种:会在日志里留下痕迹的,和不会的。
前一种容易被忽视,因为「ECC 能纠错」听起来像是问题已经解决了;后一种难查,因为除了机器偶尔重启之外没有别的线索。
这两种都值得认真对待,原因不太一样。
一、一条内存报错,整个通道跟着降速
现象:系统日志或 BMC 日志报某条 DIMM 出现可纠错错误(Correctable Error,CE)。业务没有中断,数据也没有出错,但整体性能下来了。
原因:内存控制器为了保证稳定性,会对出问题的通道采取保护措施——把该通道降频,或者关闭跨通道交织(interleaving)。
后果:一条内存的问题,代价是整个通道、甚至整台机器的内存带宽。对内存带宽敏感的业务(数据库、内存计算、虚拟化密度高的宿主机),这个损失是能被直接感知到的。
怎么判断要不要换:看 BMC 日志里 CE 计数的增长速度。
- 一个月零星几次:观察
- 一天几十上百次且在加速:该换了
ECC 能纠错,不代表可以一直放着不管。持续的 CE 通常是硬件劣化的前兆,而且它已经在拿性能换稳定了。
换的时候注意:rank 和频率要和同通道内其余条子一致。这一条展开见《同型号同容量,为什么装不上》。
二、插槽顺序装错,认不全容量
现象:装了 8 条内存,系统只认出 6 条;或者容量数字对了,但性能明显不对。
原因:每个平台的 DIMM 插槽都有规定的填充顺序。这个顺序不是美观问题,是通道对称性问题——跳着插会破坏通道配平,内存控制器无法建立完整的交织。
后果:
- 轻的:不能交织,内存带宽打折,容量数字正常,所以没人发现
- 重的:某些条子直接不被识别
做法:按主板丝印或维护手册上的填充顺序装。多数平台会在主板上印A1/B1/C1/D1 这样的标识,或者用不同颜色的卡扣区分优先插槽。不要凭感觉。
换单条的时候也一样:拆下来的条子装回原来的槽位。临时插到旁边一个「反正是空的」槽位里,是这类问题最常见的来源。
这类问题不报错,只是悄悄损失性能。做一次容量和频率的核对就能发现。
三、内存不报错,机器却隔三差五重启
现象:没有明显的硬件告警,但系统不定期宕机或重启,找不到规律。
这是三类里最难查的。
可能原因:不可纠错错误(Uncorrectable Error,UCE)。ECC 能纠正单比特错误,纠正不了多比特错误。碰到 UCE,系统为了不让错误数据扩散,会直接触发宕机。
为什么难查:宕机发生在一瞬间,操作系统往往来不及把日志写盘。你在 /var/log 里什么都找不到,只看到一次干净的重启。
从哪里查:BMC 的硬件事件日志(iDRAC / iLO / IMM / XCC,各家叫法不同)。BMC 是独立于操作系统运行的,宕机不影响它记录。UCE 事件通常会留下一行,带 DIMM 槽位信息。
定位不到具体槽位怎么办:用交叉法——拆掉一半,跑一段时间;不再宕机就说明问题在拆掉的那一半里,再二分。这个过程慢,但比继续等下一次宕机快。
备件提示:过保机型的内存往往已经停产。提前备一条放在手边,比出事之后现找快得多——尤其是当你要用交叉法排查,手里得有一条确定是好的。
排查顺序
| 症状 | 先看哪里 | 判断依据 |
|---|---|---|
| 性能下降,日志有 CE | BMC 日志 CE 计数 | 增长速度,不是绝对值 |
| 容量不对或性能不对 | 主板填充顺序 | 对照维护手册 |
| 偶发宕机,OS 日志干净 | BMC 硬件事件日志 | 找 UCE 记录和槽位 |
| BMC 也没记录 | 交叉法二分 | 逐步缩小范围 |
三类里有两类要看 BMC 日志。如果你的机房还没有把 BMC 日志接进集中监控,这件事的优先级应该排得很靠前——它是唯一一个在机器宕机时还在工作的记录者。
关于备件
内存的互换性比硬盘还细:速率、rank、颗粒组织、RDIMM/LRDIMM,任何一项对不上都可能白买。我们的料号库记到 PC4-xxxx 和 xRxx 这一级,并记录可替代料号。
常见平台的 DDR4 RDIMM 多数为库房常备。可以在备件料号速查里按品牌或料号直接搜。
本文描述的是这类设备的常见故障模式,不是某一台机器的具体案例。
