首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最大堆大小被忽略超过12 is

最大堆大小被忽略超过12 is
EN

Stack Overflow用户
提问于 2017-04-03 19:41:43
回答 1查看 1K关注 0票数 0

环境:

  • AWS R4.XLarge (4 4vCPU,30 RAM)
  • Windows2012R2
  • Tomcat 7,jdk-8u 102

首先,我不是一个开发人员,所以请耐心。当最大堆设置为24 GC或16 GC时,Tomcat只使用4GB,一些应用程序抛出java.lang.OutOfMemoryError: GC开销超过限制。我的预感是GC正在“阻止”Java访问更多内存。开发人员为GC启用的默认设置是:

代码语言:javascript
复制
call :set_XX_java_opts "+UseConcMarkSweepGC"

我做了一些研究,认为添加这些参数可以解决这个问题:

代码语言:javascript
复制
call :set_XX_java_opts "+CMSParallelRemarkEnabled"

call :set_XX_java_opts "+ScavengeBeforeFullGC"

call :set_XX_java_opts "+CMSScavengeBeforeRemark"

我在正确的轨道上吗?

谢谢,

弗雷德

EN

回答 1

Stack Overflow用户

发布于 2017-04-11 17:48:04

如前所述,如果超过98%的时间用于垃圾收集,而堆的恢复时间不足2%,则并行GC将抛出"OutOfMemoryError“。

现在,我们已经发现问题在于GC运行得太多了。这个问题可以归结为多个桶:

  1. 您创建的对象比GC恢复的速度快得多吗?
  2. 您在用例中使用corrct算法吗?
  3. 为GC定义的系统参数

因此,请用GC参数更新您的问题。

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

这将有助于我们评价上文第1和第2点。更改GC算法需要进行大量的权衡,而正确的Algo必须根据具体情况来确定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43192975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档