目前我面臨的問題是我的應用程序偶爾會顯示很長的GC時間,但所有這些只是由弱參考處理引起的。所以線程停止時間總是接近弱引用處理時間。所有其他GC循環爲0.0001秒至0.200秒。如何在GC期間降低微弱的參考處理時間?
從gc.log(格式化):
10388.186: [GC[YG occupancy: 206547 K (306688 K)]10388.186: [Rescan (parallel) ,
0.1095860 secs]10388.295: [weak refs processing, 2.0799570 secs]
[1 CMS-remark: 2973838K(3853568K)] 3180386K(4160256K), 2.1899230 secs]
[Times: user=2.51 sys=0.00, real=2.18 secs]
Total time for which application threads were stopped: 2.1906890 seconds
目前我在的地方這些設置。試過簡單的設置,但沒有改變。
-Xms4g
-Xmx4g
-XX:NewSize=128m
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:MaxGCPauseMillis=50
-XX:CMSInitiatingOccupancyFraction=50
-XX:ParallelGCThreads=16
-XX:+DisableExplicitGC
如果我打開NewSize,最終得到長的正常GC週期。該機器有8個內核,並且不會爲應用程序燒盡多少cpu。試着早點和同時開始運行舊gen GC。
是的,我無法擺脫弱ref參數,因爲這是第三方庫的一部分。
太好了。明天早上我會試試這個。 – ReneS 2010-11-04 22:15:54
請注意正確的格式:-XX:+ ParallelRefProcEnabled – ReneS 2010-11-05 07:55:25
幫助!現在的時間在0.2-0.5左右,似乎是可以預測的。真棒! – ReneS 2010-11-05 09:48:45