在装有JDK8 x64的Linux服务器上,我有16GB的RAM和8个CPU。
我已经按如下所示设置了JVM堆大小,但是仍然收到java.lang.OutOfMemoryError
JAVA_OPTS="-Xms2048m -Xmx4096m -XX:MaxPermSize=1024m -XX:-UseGCOverheadLimit
任何建议,最小/最大/ PermGen堆大小应该是什么。
答案 0 :(得分:3)
引起内存不足错误,因为您的代码占用的堆大小大于Java分配的堆大小。
这可能是由于多种原因。
1)您的代码很庞大,需要更多的内存:只需打印“ Hello World”的简单代码就不会占用太多内存。但是,冗长而庞大的1 GB源代码应用程序将消耗大量内存。如果是这种情况,您可以尝试增加内存参数。
2)错误代码:错误代码消耗了无用的内存,并且以后不释放它,导致连续使用的堆大小比收集的垃圾大。如果这是代码,则可能需要确定代码问题。您实际上可以使用Java Flight Record (JFR)来标识正在消耗大量堆的方法或类。
理想的堆内存大小因情况而异,必须准确了解堆大小。