用 dmidecode -t memory 查内存插槽数量和是否插满,关键看 locator: 和 size: 字段;size 为 no module installed 表示空槽,重复 locator 数量≈总槽数,需 sudo 权限运行。

查内存插槽数量和是否插满用 dmidecode -t memory
直接运行 dmidecode -t memory 会输出所有内存相关条目,但真正有用的只有带 Size: 和 Locator: 的段落。重点看 Size: 是否为 No Module Installed 或具体数值(如 16384 MB),就能判断某槽位是否插了内存。
常见误区是只扫一眼就以为“有输出=有内存”,其实很多主板会把空槽也列出来,只是 Size: 显示为 No Module Installed。建议配合 grep -A 5 -B 2 "Locator\|Size:" 快速筛选关键字段。
-
Locator:字段值(如CHANNELA-DIMM0)代表物理槽位名,不同厂商命名差异大,但重复出现的 Locator 数量 ≈ 实际插槽数 - 如果某槽位
Size:是0 MB或空白,可能是 BIOS 未识别或内存金手指接触不良 - 非 root 用户执行会报错
Cannot access SMBIOS data,必须加sudo
查单条内存频率得看 Configured Memory Speed 字段
dmidecode 不显示标称频率(如 DDR4-3200),而是显示当前被 BIOS 配置的实际运行频率,字段名是 Configured Memory Speed。这个值受 CPU 内存控制器、主板限制和双通道匹配影响,未必等于内存颗粒标称值。
例如一条标称 3200MHz 的内存,在某些 B450 主板上可能只显示 Configured Memory Speed: 2933 MHz —— 这不是故障,是 BIOS 自动降频适配的结果。
- 该字段只在已插内存的条目中存在;空槽位不会显示此行
- 部分老主板(如 Intel C226 芯片组)可能显示
Unknown,此时需结合lshw -class memory或sudo decode-dimms辅助判断 - 若多条内存频率不一致,
dmidecode会分别列出各自Configured Memory Speed,但系统实际以最低那条为准运行
过滤无效信息避免被噪声干扰
dmidecode -t memory 默认输出含大量冗余字段(如 Error Information Handle、Asset Tag),容易掩盖关键信息。最简实用命令是:
sudo dmidecode -t memory | grep -E "Locator:|Bank Locator:|Size:|Type:|Configured Memory Speed:"
注意 Bank Locator: 在部分服务器主板上比 Locator: 更准确,尤其当使用 RDIMM/LRDIMM 时;而消费级主板通常只输出 Locator:。
- 不要用
dmidecode -t 17替代-t memory:虽然 17 是 memory 的 type 号,但部分精简版固件会跳过 type 17,导致漏数据 - 遇到输出全为
Not Specified,大概率是 SMBIOS 表损坏或厂商未填入 SPD 信息,不能据此断定内存异常 -
sudo dmidecode -s memory-speed是个陷阱:它只返回第一个内存条的配置速度,且多数桌面 BIOS 不支持该-s子命令,返回空或报错
和 lshw、cat /proc/meminfo 的区别在哪
/proc/meminfo 只给总可用内存(MemTotal:),完全不涉及物理槽位;lshw -class memory 能显示插槽和频率,但依赖 DMI 数据完整性,某些 OEM 机器(如 Dell OptiPlex)会隐藏 clock 字段。
dmidecode 是唯一能直接映射到主板物理插槽编号的工具,前提是 BIOS 正确填充了 SMBIOS 表。它的不可替代性在于:当你需要确认「第 3 个槽位到底有没有插」或者「BIOS 当前把内存跑在多少 MHz」时,其他命令都做不到精准定位。
真正复杂的是多路 Xeon 或 EPYC 平台——每个 CPU 有自己的内存控制器,dmidecode 输出里会出现重复的 Locator:(如 PROC 1 DIMM A1 和 PROC 2 DIMM A1),这时候必须结合 numactl --hardware 看节点归属,否则容易误判插槽利用率。











