未达到实际 RAM 的一半,过度使用内存就会失败

未达到实际 RAM 的一半,过度使用内存就会失败

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

相关内容