我有一个带有 4*32 GB RAM 的 Intel 11700。
当 4 个物理 RAM 插槽已满时,BIOS、、、htop
(sudo lshw
无论sudo dmidecode dmesg
我使用什么命令来显示系统上的总 RAM)都会显示我有 128 GB RAM。
但是,我只能使用 57.2 GB,即大约可用 RAM 的一半。
我通过malloc()
在 C 中使用并在tmpfs
.前者最终返回一个NULL
指针,后者最终显示设备空间不足。
更奇怪的是,如果我只安装一两个RAM模块,即32或64 GB,我仍然只能使用大约一半的RAM,即12.1或28.7 GB。
答案1
失败malloc
,尤其是在 50% 占用率时,是严格分配的症状,IE残疾人过度使用。这是由系统vm.overcommit_memory
命令,并且可以看到
sysctl vm.overcommit_memory
如果指示 2,内核将防止过度使用,因此堆大小调整mmap
等将在分配时(而不是实际使用内存时)失败。限制设置为交换加vm.overcommit-kbytes
或者vm.overcommit-ratio
(作为物理内存的百分比)。
要获得您期望的行为,请设置vm.overcommit_memory
为 0。