0

在 Ubuntu Linux 3.2.0-25-virtual 上使用 Oracle Java 1.7.0_05,在具有 7.5 GB 内存的亚马逊 EC2 实例上,我们启动三个 java 实例,每个实例都使用开关 -Xmx 2000m。

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

在运行这些实例数周后,其中一个会死机——可能内存不足。但我的问题不是要找到我们的内存泄漏。

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

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

我们已经两次看到此问题,很抱歉报告我们没有良好的诊断。只有两个剩余的 java 进程,每个进程最多使用 2000 mb,我们怎么会用完空间?下次发生此问题时,我们应该如何进行诊断?我希望我有一个“free -h”输出,当我们无法启动程序时,在这里显示。

TIA。

4

2 回答 2

3

-Xmx 设置JVM 堆的最大大小,而不是java进程的最大大小,它在应用程序可用的堆之外分配更多内存:它自己的内存、永久代、在 JNI 库中分配的内容等。

于 2012-09-12T13:45:50.300 回答
1

可能有其他进程在使用内存,因此 JVM 无法以 2G 启动。如果您真的需要为每个 3 个 Java 进程提供那么多内存,而您总共只有 7.5 个,您可能需要更改您的 EC2 配置以拥有更多内存。您只需为其他所有内容留下 1.5,包括内核、Oracle 等。

于 2012-09-12T13:49:06.990 回答