超过提交内存失败达到实际RAM的一半

我正在运行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”允许过度使用并且对于性能是有利的。