java - CMS Old GC触发的阈值是多少

标签 java memory garbage-collection

我们服务器的 JVM 标志(内存)如下所示

-Xms2048m
-Xmx2048m
-Xss512k
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:NewSize=128m
-XX:MaxNewSize=128m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:+HeapDumpOnOutOfMemoryError

我需要找出 Old GC 的确切触发时间,即它是否与已使用的总堆内存百分比有关?

我做了一些负载很大的测试,并使用 visualVMjstat 监控应用程序。但是当实际触发旧 gc 时,我找不到任何模式。有时当 oldgen 仅使用 27.13 % 然后是 76.02 %、92.61 % 等时触发 gc。

有人可以给出一些关于实际触发旧 gc 的提示吗?

我需要找出触发旧 gc 的内存阈值。有了这个,我可以在服务器中设置一些高内存警报警告(正确的设置排除了任何要触发的错误警报)?

这篇文章说 gc 将在旧 gc 使用率默认为 70% 时触发。但在这种情况下似乎不起作用。 How full does the old generation have to be to trigger a major GC cycle?

最佳答案

您链接的另一个问题已经提供了答案:如果您通过 UseCMSInitiatingOccupancyOnly 显式配置它,则并发循环由堆占用触发。和 CMSInitiatingOccupancyFraction选项。

否则,JVM 会使用启发式方法,根据先前收集的执行情况不断调整运行时的阈值。

关于java - CMS Old GC触发的阈值是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33557644/

相关文章:

java - Maven: Artifact 的权限被拒绝

java - 试图定位泄漏点! anon 对 pmap 意味着什么?

c - 函数是否占用内存空间?

c++ - C++中增量垃圾收集模拟的内存分配

java - 我可以对堆转储文件运行 Java 垃圾回收吗?

java - 获取按钮在网格布局上的位置

java - 从 edittext 获取用户输入,输入正确后立即更改 textview (Android)

java - 实例化 Loader/AsyncTask 时是否应该使用对 Context 对象的 WeakReference?

c++ - 堆对象内的局部数组 - C++

java - 传递零大小的数组,保存分配?