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