我正在运行带有 2.6.32-358.6.2.el6.x86_64 的 centos 6.4,它实际上是作为 xen vm 运行的
内存 2 GB
在此我已经设定
cat /proc/sys/vm/overcommit_memory
2
但当我尝试启动我的 Java 应用程序时,它显示
java.io.IOException: Cannot run program "/bin/bash": java.io.IOException: error=12, Cannot allocate memory
Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory
但实际上这台机器有1.5GB的可用内存。
当我设置
echo 0 > /proc/sys/vm/overcommit_memory
一切正常,
我认为过度提交内存可以让我使用更多的虚拟 RAM(交换+实际 RAM),但为什么即使有更多可用的实际 RAM 也会失败。
答案1
从这指导:
2 — 内核拒绝所有交换空间加上 /proc/sys/vm/overcommit_ratio 中指定的物理 RAM 百分比的内存请求。此设置最适合那些希望降低内存过量使用风险的用户。
如果您的交换空间不足 2 GB,则如果 overcommit_ratio 设置得太低,内核将拒绝请求。将其设置为“1”允许过度使用,并且有利于提高性能。