Настройка сборщика мусора G1 для пропускной способности, для размера кучи

Настройка для пропускной способности

Политика G1 по умолчанию пытается поддерживать баланс между пропускной способностью и задержкой; однако существуют ситуации, когда желательна более высокая пропускная способность. Помимо уменьшения общего времени паузы, как описано в предыдущих постах, частота пауз может быть уменьшена. Основная идея заключается в том, чтобы увеличить максимальное время паузы с помощью -XX:MaxGCPauseMillis. Эвристика определения размера поколения автоматически адаптирует размер молодого поколения, что напрямую определяет частоту пауз. Если это не приводит к ожидаемому поведению, особенно на этапе восстановления пространства, увеличение минимального размера молодого поколения с помощью -XX:G1NewSizePercent заставит G1 сделать это.

В некоторых случаях -XX:G1MaxNewSizePercent, максимально допустимый размер молодого поколения, может ограничивать пропускную способность, ограничивая размер молодого поколения. Это можно диагностировать, посмотрев итоговый вывод журнала по gc+heap=info. В этом случае совокупный процент регионов Eden и Survivor близок к -XX:G1MaxNewSizePercent проценту от общего числа регионов. В этом случае рассмотрите увеличение XX:G1MaxNewSizePercent.

Другим вариантом увеличения пропускной способности является попытка уменьшить объем конкурентной работы, в частности, для конкурентных обновлений запоминаемого набора часто требуется много ресурсов ЦП. Увеличение -XX:G1RSetUpdatingPauseTimePercent перемещает работу из конкурентной операции в паузу сбора мусора. В худшем случае конкурентные обновления запомненного набора можно отключить, установив -XX:-G1UseAdaptiveConcRefinement -XX:G1ConcRefinementGreenZone=2G -XX:G1ConcRefinementThreads=0. В основном это отключает этот механизм и перемещает всю работу по обновлению запомненного набора в следующую паузу сборки мусора.

Включение использования больших страниц с помощью -XX:+UseLargePages также может улучшить пропускную способность. Обратитесь к документации по вашей операционной системе, чтобы узнать, как настроить большие страницы.

Вы можете минимизировать работу по изменению размера кучи, отключив ее; установите опции -Xms и -Xmx в одно и то же значение. Кроме того, вы можете использовать -XX:+AlwaysPreTouch, чтобы переместить работу операционной системы обратно в виртуальную память с физической памятью во время запуска виртуальной машины. Обе эти меры могут быть особенно желательны для того, чтобы сделать время паузы более последовательным.

Настройка для размера кучи

Как и другие сборщики, G1 стремится измерить кучу так, чтобы время, затрачиваемое на сборку мусора, было ниже отношения, определенного параметром -XX:GCTimeRatio. Отрегулируйте эту опцию, чтобы G1 соответствовал вашим требованиям.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки