簡體   English   中英

GC的Glassfish JVM設置

[英]Glassfish JVM settings for GC

我正在我的glassfish服務器上運行一個應用程序,我有以下JVM設置(我認為這與我的問題相關): - -Xmx512m -XX:NewRatio=2 -XX:+UseParallelOldGC -XX:+UseParallelGC所有其他設置都是默認設置。 我一直用JMC(Java Mission Control)測試服務器性能過去48小時,我注意到了這一點:PS Old Gen有大約341 MB的堆,PS Eden有大約143MB的堆,PS Surviovor有大約13MB的堆(這是我應該使用不同的SurvivorRatio嗎?)

圖表顯示,一開始java堆有大約200MB的分配空間,但是在每個完整的GC之后它增長所以現在大約是450MB,甚至堆使用(在每個完整GC之后)下降到大約100MB並且慢慢增長直到下一個小GC / full GC ...為什么提交java堆(紅線)增加? 這是正常的行為嗎? 當它達到512MB時會停止嗎? 我應該使用-Xms512m那個提交的java堆從512開始會是512MB嗎?

在此輸入圖像描述

現在關於垃圾收集:Minor GC(PS Scavenge)大約每1分鍾運行一次,持續時間大約為10-30ms。 全GC(PS MarkSweep)每14-18小時運行一次,首先持續時間為200ms,但最后一次持續時間為20秒(我不知道為什么持續時間有這么大的差異)! 我想知道這是否正常以及如何獲得更好的結果? 我應該使用-XX:+UseConcMarkSweepGC -XX:+UseParNewGC或者甚至是-XX:+UseG1GC 如果我使用這些GC中的任何一個,我將不得不增加最大堆大小(我讀過UseG1GC僅用於更大的堆)? 我是否必須更改除GC類型之外的任何其他設置(如SurvivorRatio,NewRation,...)?

JMC中的GC持續時間是否等於停止世界暫停時間(或暫停時間更短)? 因此,如果我有20秒的GC GC持續時間,這意味着我的服務器沒有響應20秒? 我的服務器上有JAX-RS,我使用ajax每隔10秒調用其中一個(超時為10秒),這意味着至少有2個呼叫不會成功? 在這種情況下,ajax調用的狀態是什么(可能是錯誤)? 我必須警告用戶有關錯誤調用的信息,我不知道在這種情況下如果錯誤是GC暫停的結果....

如果我有-Xmx1024m(比現在大兩倍),那么完整的GC會比較少見,但會持續更長的時間嗎?

我閱讀了很多關於JVM和JVM GC的文章,但我仍然不知道我必須做什么,所有設置對我的應用程序來說都是最佳的(我擔心最后20秒的GC持續時間)......

謝謝您的回答!

全GC(PS MarkSweep)大約每14-18小時運行一次,持續時間為200ms,但最后一次持續時間為20秒

嘗試通過-XX:MaxGCPauseMillis設置暫停時間目標。

我應該使用-XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC或者甚至是-XX:+ UseG1GC?

那些肯定是一種選擇,但由於並行收集器似乎能夠提供良好的延遲,並且只會隨着舊的增加而變得更糟,您可能不需要

圖表顯示,一開始java堆有大約200MB的分配空間,但是在每個完整的GC之后它增長所以現在大約是450MB,甚至堆使用(在每個完整GC之后)下降到大約100MB並且慢慢增長直到下一個小GC / full GC ...為什么提交java堆(紅線)增加?

因為您正在使用並行收集器,它以吞吐量為主要目標(如果沒有指定限制,可能會損害內存占用或延遲)。 並且它可以通過在積累大量垃圾時很少收集來提供最高的吞吐量。

通過為其提供暫停時間目標,如果它變得太大而無法滿足暫停時間目標,它將停止增長堆。

如果我有-Xmx1024m(比現在大兩倍),那么完整的GC會比較少見,但會持續更長的時間嗎?

可能,但是一旦不能滿足MaxHeapFreeRatio目標,GC將停止增加堆。

暫無
暫無

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

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