我遇到了一个奇怪的情况,我的 Ubuntu 服务器 (14.04) 无法识别安装在我服务器上的所有内存。我有一台 HP Proliant DL 380 G3 服务器 (32 位),内存为 10 GB。我无法使用超过 3GB 的内存。我安装了 Ubuntu 14.04.2 32 位版本,内核为 3.13.0-46-generic #79-Ubuntu SMP。
cat /proc/meminfo
MemTotal: 10108436 kB
MemFree: 9036220 kB
cat /boot/config-3.13.0-46-generic |grep PAE
CONFIG_X86_PAE=y
我memtester
也尝试了一个 Python 程序来测试内存,得到了结果-
sudo memtester 4G 1
pagesize is 4096
pagesizemask is 0xfffff000
bytes 0 < pagesize 4096 -- memory argument too large?
我究竟做错了什么?
答案1
您的 10 GB 内存被正确识别。但您使用的是 32 位操作系统。这意味着每个用户级进程(如memtester
)只能看到 32 位地址空间;本质上,没有一个进程可以访问超过 4 GB 的内存(通常更少)。
您已启用 PAE。这意味着,10 GB 内存的不同部分可以分配给不同的进程,因此您实际上可以使用所有内存 - 但不能由同一进程使用所有内存。
如果单个程序需要使用超过 4 GB,那么您需要安装 64 位版本的 Ubuntu。
答案2
32 位操作系统,除非完全支持PAE
(物理地址扩展),否则不能分配超过 4GB 的 RAM,包括 VRAM 和与特定主板和 I/O 设备配置相关的其他次要事项:维基百科:3 GB 屏障。
Ubuntu
已支持其PAE
自身功能,因此请尝试强制重新安装PAE
安装选项,如下所示:Ubuntu.com: PAE