最准的是sudo dmidecode -t memory查Speed字段,它反映内存模组标称频率而非实时运行频率;lshw -class memory次之,但易误读clock值;/proc/meminfo和free无法查频率;实时运行频率需decode-dimms或edac-util,且依赖硬件支持。

用 dmidecode 查内存频率(最准,但需 root)
dmidecode 读的是 BIOS/UEFI 固件里存的 SPD 信息,不是当前运行频率,但它是唯一能告诉你“这根内存条设计跑多快”的权威来源。注意:它不反映超频或降频后的实时状态,只反映模组标称能力。
- 必须用
sudo dmidecode -t memory,普通用户看不到内存段 - 关键字段是
Speed(单位 MHz),不是Configured Clock Speed(后者可能被 BIOS 锁定或未生效) - 常见干扰项:
Maximum Capacity、Form Factor和一堆Locator字段,跟频率无关,别被带偏 - 如果输出里
Speed显示Unknown,大概率是笔记本或老旧主板 SPD 信息没填全,不是命令错了
sudo dmidecode -t memory | grep -E "Locator|Speed"
用 lshw 看当前插槽识别到的速率(兼顾可用性与可读性)
lshw 调用的是内核对 SMBIOS 的解析,结果和 dmidecode 接近,但默认不显示所有字段,需要加 -class memory 过滤。
- 它比
dmidecode更友好,输出结构清晰,适合快速扫一眼 - 缺点是某些精简版系统(如 Alpine、部分容器镜像)没预装,得先
apk add lshw或apt install lshw - 注意区分
clock(总线时钟,比如 100 MHz)和实际等效频率(DDR4-3200 对应 1600 MHz 有效时钟 ×2),lshw一般显示前者,容易误读
示例关键行:clock: 1600MHz (0.6ns) → 实际是 DDR4-3200
用 cat /proc/meminfo 或 free 能不能查频率?
不能。这两个只管容量和使用量,和速度完全无关。/proc/meminfo 里压根没有频率字段;free 输出的 Mem: 行只含 total/used/available。
- 有人误以为
MemTotal数值大就代表高频,这是典型混淆容量和带宽 -
free -h的buff/cache列也和内存物理特性无关,纯内核管理策略 - 如果你看到网上教程说“
free显示 32G 就是 DDR5”,那是在胡扯
想看实时运行频率(比如是否降频、XMP 是否生效)?得看 decode-dimms 或 edac-util
Linux 内核本身不暴露运行时 DRAM 时钟,必须依赖硬件支持的 EDAC(Error Detection and Correction)模块或 SMBus 工具。
- 先确认模块加载:
lsmod | grep edac,没输出说明驱动没启,sudo modprobe edac_mce_amd(AMD)或edac_i7core(Intel)试试 -
decode-dimms是 i2c-tools 里的工具,能读 SPD 并推算当前配置下的理论速率,但它依然不是“实时采样”,而是基于寄存器配置反推 - 真正接近实时的只有主板厂商工具(如 ASUS AI Suite、ASRock A-Tuning),但它们基本没 Linux 版;服务器平台可查 IPMI sensor(
ipmitool sdr type memory),但消费级主板通常不开放
简单说:Linux 没有通用、免 root、实时反馈内存运行频率的命令。你能拿到的,基本就是 SPD 标称值 + 主板 BIOS 配置意图。










