簡體   English   中英

Java 8中的默認Full GC間隔是多少?

[英]What is the default Full GC interval in Java 8

我們在生產服務器上發現了一個奇怪的行為(JavaEE,Wildfly 10)。 Java VM每小時執行一次Full GC,盡管仍有足夠的可用內存。

在此輸入圖像描述

VM啟動參數為:

-server
-Xms4g
-Xmx8g

以下參數激活:

-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000

那么Java 8中的默認Full GC間隔是什么?如何將其配置為動態?

你這么說

-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000

沒有“激活”。 但是,這些是這些屬性的默認值; 即,如果不指定屬性的值,則獲得的值。

參考: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, ZGCShenandoah

    您可以調整其他內容以減少並發收集器“停止世界”暫停,但這超出了此問題的范圍。

另一種解決方案是設置選項

 -XX:+ExplicitGCInvokesConcurrent 

與...結合

 -XX:+UseG1GC

這樣,System.gc()不會被禁用,但通過使GC在並發模式下工作而不是導致“停止世界”的情況來減少危害。 我用它來成功地將WildFly中的GC暫停從10秒減少到500毫秒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM