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
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算法有很多折衷,必须根据具体情况确定正确的算法您可以共享所有JVM参数吗?安装64位Java而不是32位。如果tomcat仅使用4GB,为什么有些应用程序会抛出otofmemory?获取堆转储并分析堆中发生的事情,并确保那里发生的事情。一个不错的链接,你可能想参考