gpt4 book ai didi

java - 超过 12GB 时将忽略最大堆大小

转载 作者:行者123 更新时间:2023-11-28 23:21:22 25 4
gpt4 key购买 nike

环境:

  • AWS R4.XLarge(4 个 vCPU,30GB 内存)
  • Windows 2012R2
  • Tomcat 7, jdk-8u102

首先,我不是开发人员,所以请耐心等待。将最大堆设置为 24GB 或 16GB 时,Tomcat 仅使用 4GB,一些应用程序会抛出 java.lang.OutOfMemoryError: GC overhead limit exceeded。我的直觉是 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"

我走在正确的轨道上吗?

谢谢,

弗雷德

最佳答案

如您之前所述,如果超过 98% 的总时间花在垃圾收集上并且回收不到 2% 的堆,则并行 GC 将抛出“OutOfMemoryError”

现在,我们已经确定问题出在 GC 运行过多。这个问题可以从多个方面来看:

  1. 您创建的对象是否比 GC 恢复的速度快得多?
  2. 您是否针对您的用例使用了正确的 GC 算法?
  3. 为 GC 定义的系统参数

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

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

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

关于java - 超过 12GB 时将忽略最大堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com