Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 超过12GB时忽略最大堆大小_Java_Tomcat_Garbage Collection - Fatal编程技术网

Java 超过12GB时忽略最大堆大小

Java 超过12GB时忽略最大堆大小,java,tomcat,garbage-collection,Java,Tomcat,Garbage Collection,环境: AWS R4.XLarge(4vCPU,30GB RAM) Windows 2012R2 Tomcat 7,jdk-8u102 首先,我不是开发人员,所以请耐心等待。最大堆设置为24GB或16GB时,Tomcat仅利用4GB,一些应用抛出java.lang.OutOfMemoryError:超出了GC开销限制。我的直觉是GC正在“阻止”Java访问更多内存。开发人员为GC启用的默认设置为: call :set_XX_java_opts "+UseConcMarkSweepGC" 我

环境:

  • AWS R4.XLarge(4vCPU,30GB RAM)
  • Windows 2012R2
  • Tomcat 7,jdk-8u102
首先,我不是开发人员,所以请耐心等待。最大堆设置为24GB或16GB时,Tomcat仅利用4GB,一些应用抛出java.lang.OutOfMemoryError:超出了GC开销限制。我的直觉是GC正在“阻止”Java访问更多内存。开发人员为GC启用的默认设置为:

call :set_XX_java_opts "+UseConcMarkSweepGC"
我做了一些研究,觉得添加这些参数可以解决这个问题:

call :set_XX_java_opts "+CMSParallelRemarkEnabled"

call :set_XX_java_opts "+ScavengeBeforeFullGC"

call :set_XX_java_opts "+CMSScavengeBeforeRemark"
我走对了吗

谢谢


Fred

如您前面所述,如果总时间的98%以上用于垃圾收集,而堆的恢复率不足2%,则并行GC将抛出“OutOfMemoryError”

现在,我们发现问题在于GC运行太多。 这一问题可以分为多个方面:

  • 您创建的对象是否比GC恢复的速度快得多
  • 您是否为您的用例使用了正确的GC算法
  • 为GC定义的系统参数
  • 所以,请用GC的参数更新您的问题

    我建议您首先使用“-XX:-PrintGCDetails”打印GC详细信息,并使用:-XX:HeapDumpPath=./java_pid.hprof创建堆转储文件

    这将有助于我们评估上述第1点和第2点。
    更改GC算法有很多折衷,必须根据具体情况确定正确的算法

    您可以共享所有JVM参数吗?安装64位Java而不是32位。如果tomcat仅使用4GB,为什么有些应用程序会抛出otofmemory?获取堆转储并分析堆中发生的事情,并确保那里发生的事情。一个不错的链接,你可能想参考