Настройка параллельного GC для эффективного Young GC - PullRequest
0 голосов
/ 26 сентября 2018

На этой диаграмме показано использование кучи (OU + EU + S1U + S2U) нашего Java-приложения за 4 дня.Каждая капля является событием Young GC.Как вы можете заметить, в куче используется все больше моделей.Полный GC происходит после запуска в течение 6 дней (не показано на графике).Это снижает использование кучи до нормального уровня, но время паузы составляет 2 минуты, и это заставляет приложение отбрасывать много транзакций.

enter image description here

НашиJRE 8, и мы используем Parallel GC.Параметры кучи приведены ниже:

 java -server -Xms64g -Xmx64g -XX:MetaspaceSize=96M -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -XX:MaxMetaspaceSize=1g -XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:+HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.zip.disableMemoryMapping=true

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

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Как указывает г-н Лоури, вы можете увеличить молодое поколение, что увеличит (мы надеемся) время между второстепенными событиями GC.Таким образом, больше объектов должны стать мусором и будут собираться в младшем GC, а не повышаться до старого поколения.Альтернативный подход заключается в увеличении порога владения, который дает тот же эффект, что дольше сохраняет объекты в молодом поколении.

Другой вопрос, который вы должны себе задать, - вам действительно нужно использовать параллельный сборщик мусора?Если вы используете G1, часть работы по сбору старого пространства выполняется одновременно с потоками приложения.Возможно, вам удастся полностью устранить длинные паузы (при условии, что вы не пострадали от чрезмерной фрагментации кучи), поскольку вам не потребуется полная компактная сборка.

Для полного устранения пауз я могу от всей души порекомендовать коллектор C4 вЗинг из Азула (на кого я работаю :-)).

0 голосов
/ 26 сентября 2018

Проблема заключается в том, что объекты перемещаются на постоянное место, а затем умирают.Один из способов уменьшить это - увеличить молодое пространство, однако это приведет только к задержке полного сбора.

Альтернативой может быть уменьшение кучи, чтобы она собиралась чаще, сокращая время паузы.Если вы используете кучу 32 ГБ, она может использовать сжатые операции, что делает использование памяти более эффективным.

...