前言
大家好,我是JACK,本篇是服务器硬件基础系列第三篇,上一篇我们详细讲了CPU,这篇我们聊内存,结合实际测试经验来讲。
一、内存是什么
内存(RAM,Random Access Memory)是服务器运行时临时存放数据的地方,CPU处理任务时所需的数据都先加载到内存里,速度极快,但断电后数据消失。
服务器内存和普通PC内存相比:
- 容量更大,通常从64GB起步,高配可达TB级别
- 支持**ECC(错误纠正码)**功能,自动检测并纠正内存数据错误,保障数据准确性
- 支持多通道,提升内存带宽
- 更注重稳定性和长时间运行可靠性
二、内存关键参数
拿到服务器先用dmidecode确认内存规格:
[root@localhost ~]# dmidecode -t memory
Memory Device
Locator: DIMM_A1
Bank Locator: Node0_Channel0
Type: DDR4
Speed: 3200 MT/s
Manufacturer: Samsung
Serial Number: 12AB34CD
Size: 32 GB
Configured Memory Speed: 3200 MT/s
Memory Device
Locator: DIMM_A2
Bank Locator: Node0_Channel1
Type: DDR4
Speed: 3200 MT/s
Manufacturer: Samsung
Serial Number: 12AB34CE
Size: 32 GB
Configured Memory Speed: 3200 MT/s
重点核对以下信息:
| 字段 | 说明 |
|---|---|
| Size | 单条容量,确认是否符合规格 |
| Speed | 内存频率,确认是否达到标称值 |
| Type | 内存类型,DDR4/DDR5 |
| Locator | 槽位信息,确认内存安装位置正确 |
| Manufacturer | 品牌,确认是否符合BOM要求 |
也可以用free命令快速查看总内存:
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 503Gi 12Gi 478Gi 234Mi 12Gi 488Gi
Swap: 0B 0B 0B
三、内存测试方法
内存测试主要分两类:功能验证和压力测试。
1. 功能验证 — 读写速率
使用STREAM测试内存读写带宽,验证内存性能是否达标:
[root@localhost ~]# gcc -O3 -fopenmp stream.c -o stream
[root@localhost ~]# ./stream
-------------------------------------------------------------
STREAM version $Revision: 5.10 $
-------------------------------------------------------------
Number of Threads requested = 128
-------------------------------------------------------------
Function Best Rate MB/s Avg time Min time Max time
Copy: 185432.3 0.008658 0.008628 0.008702
Scale: 179856.7 0.008912 0.008896 0.008934
Add: 196324.5 0.012198 0.012224 0.012187
Triad: 198756.2 0.012065 0.012074 0.012059
-------------------------------------------------------------
重点关注Triad综合带宽,如果跑分明显偏低,检查:
- 内存通道是否插满
- 内存是否按推荐槽位对称安装
- 内存频率是否正确配置
2. 压力测试
memtest — 专业内存检测工具,逐一检测每个内存单元是否存在故障:
# 安装memtest
yum install memtest86+
# 运行memtest(通常在开机引导阶段运行)
memtest86+
memtest会对内存进行多轮读写校验,发现错误会直接报告出错的内存地址,适合深度检测内存硬件问题。
stress/stress-ng — 对内存施加持续压力,验证稳定性:
# stress对内存加压,占用80%内存跑1小时
stress --vm 4 --vm-bytes 80% --timeout 3600
# stress-ng更精细的内存压力模式
stress-ng --vm 4 --vm-bytes 80% --vm-method all --timeout 3600
压测期间同步监控内存使用情况:
[root@localhost ~]# watch -n 2 free -h
total used free shared buff/cache available
Mem: 503Gi 398Gi 92Gi 234Mi 12Gi 102Gi
Swap: 0B 0B 0B
# 确认内存压力真正跑上去
四、压测时温度和功耗监控
内存压测期间同步监控温度:
# 查看内存相关温度传感器
[root@localhost ~]# ipmitool sensor list | grep -i mem
DIMM_A1_Temp | 42.000 | degrees C | ok
DIMM_A2_Temp | 41.000 | degrees C | ok
DIMM_B1_Temp | 43.000 | degrees C | ok
DIMM_B2_Temp | 42.000 | degrees C | ok
# 持续采集内存温度日志
watch -n 5 'ipmitool sensor list | grep -i mem' >> mem_temp_log.txt
五、常见问题及排查
内存压力告警导致测试中断
这是内存压测中最常见的问题,压力跑到一半系统触发告警甚至中断测试。
可能原因和排查方法:
1. 内存温度过高
- 查看ipmitool温度传感器,确认内存温度是否超过阈值
- 正常内存工作温度一般不超过85℃
- 如果温度异常高,检查机房环境温度和服务器风道是否畅通
2. 内存出现硬件错误
- 查看系统日志有无内存报错:
[root@localhost ~]# dmesg | grep -i memory
[ 123.456789] EDAC MC0: 1 CE memory read error on CPU_SrcID#0_MC#0_Chan#0_DIMM#0
# CE表示可纠正错误,UE表示不可纠正错误,UE需要立即更换内存条
3. 内存容量不足
- 压测占用内存过大导致系统OOM(内存溢出)
- 适当调低压测内存占用比例:
# 改为占用60%内存
stress --vm 4 --vm-bytes 60% --timeout 3600
4. ECC错误触发
- 服务器ECC机制检测到内存错误自动告警
- 查看BMC Web端的系统事件日志(SEL),确认告警类型
- 也可以用命令查看:
[root@localhost ~]# ipmitool sel list
1 | 03/02/2025 | Memory | Correctable ECC | Asserted
# 出现ECC告警需记录并评估是否需要更换内存
六、测试时需要记录的数据
| 指标 | 说明 |
|---|---|
| 总内存容量 | 是否和规格一致 |
| 内存频率 | 是否达到标称值 |
| STREAM Triad | 内存综合带宽跑分 |
| 内存最高温度 | 压测期间峰值温度,正常不超过85℃ |
| ECC错误次数 | 压测期间是否有ECC告警 |
| 压测时长 | 建议至少跑2小时以上 |
七、总结
内存测试核心关注三点:读写速率达标、压力稳定、无ECC报错。遇到压力告警中断,优先查温度和系统日志,定位是温度问题还是硬件错误。
下一篇我们聊存储详解,包括HDD、SSD、NVMe的测试方法和实操经验,敬请期待!
欢迎关注JACK的服务器笔记!