這是Linux內核或系統管理員的問題。儘管免費報告「可用」,但「無法分配內存」
我從QEMU這個錯誤,嘗試啓動虛擬機與3GB內存:
ioctl(KVM_CREATE_VM) failed: 12 Cannot allocate memory
failed to initialize KVM: Cannot allocate memory
據我所知,這可能是因爲沒有足夠的內存或提交限制太低,但顯然不是......有5.9 GB的可用傾倒緩存和沒有提交限制:
$ free -m
total used free shared buff/cache available
Mem: 7696 1287 135 139 6274 5973
Swap: 2892 525 2367
$ cat /proc/sys/vm/overcommit_memory
1
於是我就寫了一個C++程序來分配先後更大的塊。我發現它未能分配超過2.1 GB。 (N.B.它被編譯爲64位)。這與Qemu沒有啓動一致,但爲什麼?
然後我修改它寫入內存。這導致一些緩存被傾倒,提供免費的報告,在這個分配約2 GB:
$ free -m
total used free shared buff/cache available
Mem: 7696 2988 288 143 4420 4268
Swap: 2892 525 2367
...這在程序終止:
$ free -m
total used free shared buff/cache available
Mem: 7696 1258 2253 147 4185 5994
Swap: 2892 525 2367
現在我試圖啓動的Qemu和神奇有效!免費報告:
$ free -m
total used free shared buff/cache available
Mem: 7696 2438 4451 147 806 4834
Swap: 2892 530 2362
所以看起來內核不願意當問一大塊釋放一些緩存,但是願意讓他們在幾個步驟走。這是怎麼回事?
我運行Debian測試: 的Linux - 4.11.0-1-AMD64#1 SMP的Debian 4.11.6-1(2017年6月19日)x86_64的GNU/Linux的