在 Linux 中查看实际可用内存(即系统真正能分配给进程使用的内存,而非物理总容量),需要区分几个关键指标:
✅ 正确方法:使用 free 或 htop
# 推荐:单位统一为 GiB,显示更清晰
free -h
输出示例:
total used free shared buff/cache available
Mem: 31.5G 2.1G 8.0G 100M 21.4G 28.9G
Swap: 4.0G 0.0G 4.0G
available列(本例中28.9G)才是实际可被新进程使用的内存,它已考虑了:- 内核占用
- 缓存/缓冲(
buff/cache)中可回收的部分 - 交换空间影响(若 swap 充足)
📌 注意:你提到“32GiB”,但
total显示为 31.5G 是正常现象——部分内存可能被硬件保留(如集成显卡显存、BIOS 预留等),并非故障。
🔍 验证物理内存是否完整识别
若怀疑部分内存未被识别(例如只看到 31.5G 而非 32G):
# 检查 BIOS/UEFI 报告及内核识别情况
lscpu | grep "CPU(s)" # 看 CPU 信息
cat /proc/meminfo | grep MemTotal
sudo dmidecode -t memory # 需 root,查看硬件报告
sudo dmesg | grep -i "memory" # 查启动时内存检测日志
常见原因导致“少几 GB”:
- 集成显卡共享内存(Intel HD Graphics 默认占 1~2GB)
- ECC 校验占用少量空间
- 硬件预留区域(用于 ACPI、SRAT 等)
- 大页内存(HugePages)预分配未释放
🛠️ 提升可用内存建议
若 available 远低于预期(如 32G 物理仅 ~15G 可用):
- 检查是否有内存泄漏进程:
top -o %MEM | head -n 10 - 调整
vm.swappiness(降低优先使用 swap):sudo sysctl vm.swappiness=10 - 清理缓存(临时释放):
sudo sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
需要我帮你分析具体 free -h 输出或 /proc/meminfo 内容吗?可以贴出结果,我来解读哪部分被占用及如何优化。
PHPWP博客