История
Мой сервер работает с процессорами 24x2, а размер кучи Java составляет около 70 ГБ.В какой-то момент после установки новой версии (версия-B) я увидел, что Full GC занимает около 30 секунд (останавливая все потоки).После включения XX: + ParallelRefProcEnabled обработка слабых ссылок снизилась до 3-6 секунд.Но это всего лишь «помощь при изгибе», а не лекарство.
2011-03-22T20: 38: 24.276 + 0000: 29540.794: [GC [Занятость YG: 5477281 K (7549760 K)]29540.794: [Повторное сканирование (параллельное), 0,4083780 с] 29541,203: [обработка слабых ссылок, 3,2855240 с] 29544,488: [разгрузка классов, 0,0187270 с] 29544,50: [таблицы символов и строк очистки, 0,0095530 с] [1 CMS-примечание: 102801236K (114294784K)] 108278518K (121844544K), 3,7319690 с] [Время: пользователь = 65,53 sys = 0,14, реальное = 3,73 с]
До версии-B (и без флага ParallelRefProcEnabled) слабая ссылкаОбработка занимала около 1,5 сек.(Примерно для той же нагрузки)
Цель:
Я пытаюсь выяснить, в чем заключалось изменение, внесенное в версию B, из-за которой скорость обработки возросла с 1,5 с до30 секВ версии B есть несколько изменений, и нет никаких реальных подозрений, связанных со слабыми ссылками.
Я хочу изменить свой код, чтобы он не передавался при обработке тяжелых слабых ссылок.
Вопросы:
Я хотел бы понять, что именно происходит на этапе "обработки слабых ссылок", чтобы я мог найти подозреваемого или оправдать переписывание кода.Любой хороший ресурс для чтения о том, что именно происходит на этом этапе?
Каковы возможные причины длительной "слабой обработки ссылок"?(Количество экземпляров слабых ссылок, количество объектов, содержащих слабые ссылки, глубина дерева ссылок, на которое есть слабые ссылки, ...)
Дополнительная информация:
- Загрузка ЦП не так высока и, похоже, не является проблемой
- GC (который включает в себя обработку слабых ссылок) происходит примерно каждые 8 минут.
- Запуск Java Sun, 1.6.0_20
Буду признателен за любой ответ, Спасибо, Эрез.