die*_*ter 5 java jboss garbage-collection wildfly
我们注意到生产服务器(JavaEE,Wildfly 10)上有一个奇怪的行为。尽管仍有足够的可用内存,但Java VM每小时执行一次完整GC。
VM启动参数为:
-server
-Xms4g
-Xmx8g
Run Code Online (Sandbox Code Playgroud)
以下参数未激活:
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
Run Code Online (Sandbox Code Playgroud)
那么Java 8中默认的Full GC间隔是什么?如何将其配置为动态?
你说
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
Run Code Online (Sandbox Code Playgroud)
没有“激活”。但是,这些是这些属性的默认值;即,如果您不为属性指定值,则您获得的值。
参考:Oracle 的sun.rmi 属性文档。
那么 Java 8 中默认的 Full GC 间隔是多少
有关 DCG 触发的完整 GC,请参见上文。
除此之外,当请求(通过System.gc()调用)或 JVM 认为有必要时,会发生完整的 GC 。如果您不使用 RMI,则没有固定的时间间隔。
...以及如何将其配置为动态的?
如果你的意思是,你怎么能阻止 RMI 每小时触发一次完整的 GC:
一种方法是为这些属性指定(很多)更大的值。
另一种方法是使用-XX:+DisableExplicitGC标志启动 JVM 。注意:这将禁用所有调用,System.gc()而不仅仅是 RMI 的 DGC 发出的调用。另请参阅:当使用 NIO 直接缓冲区时设置 -XX:+DisableExplicitGC 的影响可能会导致一些问题。
第三种方法是使用-XX:+ExplicitGCInvokesConcurrent标志。这减少了对 调用的影响System.gc(),但它只适用于支持并发收集的 GC;例如 CMS、G1、ZGC或Shenandoah。
您可以潜在地调整其他内容以减少并发收集器“停止世界”的暂停,但这超出了本问题的范围。