我们服务器的JVM标志(内存)如下所示
-Xms2048m
-Xmx2048m
-Xss512k
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:NewSize=128m
-XX:MaxNewSize=128m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:+HeapDumpOnOutOfMemoryError
我需要找出旧GC启动的时间,即它与使用的总堆内存百分比有关吗?
我使用 visualVM 和 jstat 对大量负载进行了一些测试并监控了应用。但实际上触发旧gc时我找不到任何模式。有时gc被触发当oldgen仅被利用27.13%然后76.02%,92.61%等。
有人可以提供一些关于实际触发旧gc的提示吗?
我需要找出触发旧gc的内存阈值。有了这个,我可以在服务器中设置一些高内存警报警告(正确的设置排除任何触发的错误警报)?
这篇文章说,默认情况下,旧的gc使用率为70%时会触发gc。但似乎没有在这种情况下工作。 How full does the old generation have to be to trigger a major GC cycle?
答案 0 :(得分:2)
您已经链接的另一个问题已经提供了答案:如果您通过UseCMSInitiatingOccupancyOnly
和CMSInitiatingOccupancyFraction
选项明确配置了并发周期,则会由堆占用率触发。
否则JVM会使用启发式方法,根据以前的集合执行方式,在运行时连续调整阈值。