MemTotal 是物理内存总容量的唯一可信基准,单位 KB,可从 /proc/meminfo 直接读取;free -h 显示的是内核实际管理的可用总量;dmidecode 反映硬件标称容量,但需 sudo 且不保证内核启用。

直接看 MemTotal 字段,它就是物理内存总容量,单位是 KB,其他方式都绕弯子。
用 free -h 快速确认总内存
这是最常用、最直观的方式:
free -h输出第一行Mem:后的total值,就是当前可用物理内存总量(已扣除内核保留等不可用部分)- 注意:
free显示的是内核实际识别并可管理的内存,和 BIOS/UEFI 报告的插槽容量可能略有差异(比如被显卡或硬件保留) - 如果看到
total明显小于你插的内存条标称值(如插了 32GB 却只显示 31.2Gi),大概率是被 GPU 或 iGPU 预留了一部分——这时得查dmesg | grep -i memory看启动日志里的保留记录
从 /proc/meminfo 读取原始数值
所有内存工具底层都依赖这个文件,它最权威:
- 运行
grep MemTotal /proc/meminfo,输出类似MemTotal: 32857904 kB - 这个数字是内核启动时探测到的物理内存上限,未经任何缓存或预留逻辑“美化”
- 想转成 GB?简单除以 1024²:
awk '/MemTotal/ {printf "%.1f GBn", $2/1024/1024}' /proc/meminfo - 别信
cat /proc/meminfo全量输出里排在后面的字段(比如MemA vailable),它们跟“总大小”无关
用 dmidecode 查物理插槽真实容量
当你要确认硬件是否插到位、有没有被屏蔽,就得绕过内核,直读 SMBIOS:
- 执行
sudo dmidecode -t memory | grep -E "Size|Speed|Type" - 每条
Size:行代表一个内存插槽的实际容量(Size: No Module Present表示空槽) - 注意:普通用户无权限运行
dmidecode,必须加sudo;某些云主机或容器环境根本不可用(因为没访问固件权限) - 该命令显示的是 DIMM 标签上的标称值,不反映内核是否真正启用——比如插了 ECC 内存但 BIOS 关闭了 ECC,
dmidecode仍会显示容量,而/proc/meminfo可能略少
有个细节特别容易被忽视:内存总量从来不是“机器里插了多少”,而是“内核最终识别了多少”。/proc/meminfo 里的 MemTotal 才是唯一靠谱的判断基准,其他结果,本质上都只是基于它的展示或推导。要是 free -h 和 dmidecode 的数值对不上,优先看前者;如果连 MemTotal 都明显偏小,比如远低于硬件标称规格,那基本可以确定,问题就出在 BIOS 设置、内核启动参数(例如 mem= 限制)或者硬件兼容性上。