Большое количество меток CMS делает паузу в заметках, хотя Old gen не наполовину заполнен

Я пытаюсь понять причину большого количества меток и замечаний CMS (в том числе и других фаз), составляющих в среднем около 700 мс, даже несмотря на то, что старый ген еще не наполовину полон. Далее следуют конфигурации и статистика GC из GCViewer.

-Xms3g 
-Xmx3g 
-XX:NewSize=1800m 
-XX:MaxNewSize=1800m
-XX:MaxPermSize=256m
-XX:SurvivorRatio=8
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled

Сводка с использованием GC Viewer: http://i.imgur.com/0IIbNUr.png

GC Log

152433.761: [GC [1 CMS-initial-mark: 284761K(1302528K)] 692884K(2961408K), 0.3367298 secs] [Times: user=0.33 sys=0.00, real=0.34 secs] 
152434.098: [CMS-concurrent-mark-start]
152434.417: [CMS-concurrent-mark: 0.318/0.318 secs] [Times: user=1.38 sys=0.02, real=0.32 secs] 
152434.417: [CMS-concurrent-preclean-start]
152434.426: [CMS-concurrent-preclean: 0.008/0.009 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
152434.426: [CMS-concurrent-abortable-preclean-start]
 CMS: abort preclean due to time 152439.545: [CMS-concurrent-abortable-preclean: 4.157/5.119 secs] [Times: user=5.82 sys=0.20, real=5.12 secs] 
152439.549: [GC[YG occupancy: 996751 K (1658880 K)]152439.550: [Rescan (parallel) , 0.5383841 secs]152440.088: [weak refs processing, 0.0070783 secs]152440.095: [class unloading, 0.0777632 secs]152440.173: [scrub symbol & string tables, 0.0416825 secs] [1 CMS-remark: 284761K(1302528K)] 1281512K(2961408K), 0.6771800 secs] [Times: user=3.35 sys=0.02, real=0.68 secs] 
152440.227: [CMS-concurrent-sweep-start]
152440.613: [CMS-concurrent-sweep: 0.382/0.386 secs] [Times: user=0.39 sys=0.01, real=0.39 secs] 
152440.613: [CMS-concurrent-reset-start]
152440.617: [CMS-concurrent-reset: 0.004/0.004 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 
152441.719: [GC [1 CMS-initial-mark: 284757K(1302528K)] 1320877K(2961408K), 0.7720557 secs] [Times: user=0.78 sys=0.01, real=0.77 secs] 
152442.492: [CMS-concurrent-mark-start]

1 ответ

Замечание CMS должно сканировать молодое поколение, так как ваше молодое поколение настолько велико, что это займет некоторое время. В зависимости от версии Java (которую вы не указали!), Вам может потребоваться включить параллельную пометку (CMSParallelRemarkEnabled).

Включение CMSScavengeBeforeRemark может также уменьшить объем памяти, который необходимо сканировать во время замечаний.

И простое сокращение нового поколения и получение еще нескольких промо-акций, которые затем будут очищены одновременным GC старого поколения, тоже могут сработать.

Я не думаю, что инкрементный режим что-то здесь исправляет, он просто радикально меняет поведение CMS, маскируя исходную проблему.

Другие вопросы по тегам