2015-11-06 58 views
2

的JVM標誌(內存),如下什麼是CMS老GC的門檻,爲我們的服務器被觸發

-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%時觸發。但似乎沒有在這種情況下工作。 How full does the old generation have to be to trigger a major GC cycle?

回答

2

已經鏈接其他問題提供了答案:一個併發的週期是由堆佔用觸發,如果你明確地通過UseCMSInitiatingOccupancyOnlyCMSInitiatingOccupancyFraction選項來配置它。

JVM使用其他啓發式方法,它根據以前的集合執行方式在運行時連續調整閾值。

+0

感謝您的回答。在我的情況下CMSInitiatingOccupancyFraction沒有設置,所以我想這可能是默認的68%。我認爲,正如你所說的,JVM使用一些啓發式來決定閾值。那麼你是否說我沒有辦法事先決定門檻? – Kripz

+0

我在說你應該設置這些設置。 – the8472

相關問題