我们在 Amazon EC2 中使用 Fedora-8 64 位,并且我们的 Java 应用程序在 IBM JRE 上运行。现在我们收到 Java 挂起“内存不足”错误。我们的内存为 7.6 GB,并且已分配堆内存 -Xms3000M -Xmx3000M
。我们仍然遇到同样的问题。问题是,如果我增加堆大小,那么这个问题会得到纠正吗?或者还有其他方法可以解决这个问题吗?
答案1
3G 听起来像是分配给 Java 堆的足够大的内存量,您可能不会遇到堆内存不足的情况,而是遇到永久代 (PermGen) 内存不足的情况。考虑增加 PermSize 和 MaxPermSize。
为了解决问题,您可能需要监视 JVM 内存的增长速度和增长部分。使用 JMX 控制台,您也可以进行更深入的观察 - 获取正在运行的 Java 堆的快照并对其进行分析以确定有问题的位置(http://www.eclipse.org/mat/)线程转储和对象直方图也可能有帮助。
答案2
Fedora-8 是四年前的版本。在尝试追踪任何行为不当的软件内存问题之前,您应该认真考虑将您的环境升级到发行版和 EC2 内核的最新稳定版本。
答案3
您不应该使用“JRE”版本的 Java。您应该使用支持 -server VM 的 Java 版本。可能是因为您运行的是 JRE 版 Java,因此 JVM 大小受到限制,因为它默认为非服务器 VM。调查这个问题很容易:只需在您的 JRE 目录中查找“server”目录,看看是否有它。不过,我对 IBM JRE 一无所知,因此您的情况可能会因我的建议而异。
我建议尝试最新版本的 Oracle JDK,因为我 100% 确定它有一个 -server 实现。或者,如果您可以获得,也许是 IBM vm 的 JDK 版本。
我之所以这么说,是因为您的问题表明您明确使用了 JRE。