Linux上的Java -Xmx选项不限制内存消耗

时间:2012-09-12 13:41:19

标签: java

在Ubuntu Linux 3.2.0-25-virtual上使用Oracle Java 1.7.0_05,在具有7.5 GB内存的amazon EC2实例上,我们启动了三个java实例,每个实例使用交换机-Xmx 2000m。

我们使用默认的Ubuntu EC2 AMI配置,没有交换空间。

运行这些实例几周后,其中一个冻结 - 可能是内存不足。但我的问题不是找到我们的内存泄漏。

当我们尝试重新启动应用程序时,java会给我们一条消息,指出它无法分配2000 MB的内存。我们通过重启服务器解决了这个问题。

换句话说,2000 + 2000 + 2000> 7500?

我们已经两次看过这个问题了,很抱歉我们没有很好的诊断信息。我们怎么能用剩余的两个java进程耗尽空间,每个进程最多使用2000 mb?我们该如何在下次发生时继续诊断这个问题?我希望我有一个“free -h”输出,在我们无法启动程序的时候,在这里显示。

TIA。

2 个答案:

答案 0 :(得分:3)

-Xmx设置 JVM堆的最大大小,而不是java进程的最大大小,它除了可用于应用程序的堆之外还分配更多内存:它自己的内存,永久世代,在JNI图书馆内分配的内容等等。

答案 1 :(得分:1)

可能有其他进程使用内存因此无法使用2G启动JVM。如果你真的需要为每个3个Java进程提供那么多内存而你只有7.5个,你可能想要更改你的EC2配置以获得更多内存。你刚刚离开1.5,其他一切包括核心,甲骨文等。