我正在运行centos 6.4 2.6.32-358.6.2.el6.x86_64这实际上是作为一个Xen虚拟机运行与
公羊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.5 GB的可用内存。
当我设置
echo 0 > /proc/sys/vm/overcommit_memory
一切工作正常,
我认为在提交内存允许我使用更多的虚拟内存(交换+真正的内存),但为什么它失败,即使更多的免费真正的内存。
从这个指南:
2 – 内核失败的内存请求加起来,加上所有的swap加上/ proc / sys / vm / overcommit_ratio中指定的物理RAM的百分比。 对于那些希望记忆过度承诺风险较低的人来说,这种设置是最好的。
如果交换空间小于2 GB,那么如果overcommit_ratio设置得太低,内核将拒绝该请求。 将其设置为“1”允许过度使用并且对于性能是有利的。