powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Настроить GC у приложения
7 сообщений из 7, страница 1 из 1
Настроить GC у приложения
    #39742783
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема, есть метод который жутко мусорит в jvm, он по сути создает очень сложную модель данных по описанию текстовому.

Худший сценирий в зависимости от сложности этого описания, в jvm 13Gb замусорить и если запустить gc то останется около 2.5Gb живых данных. В среднем около 60-90% это мусор. Чистка занимает секунд 40-60.

Не все модели такие большие но крайней мере одна точно попадается, в среднем это 8Gb и после очистки около 1.5Gb.

Т.е в приципе 16Gb на сервере достаточно для работы порядки 5 моделей, но грузим первую после загрузки остается около 3-5Gb памяти. Грузим вторую и там начинается gc и все очень медленно работает.

В jsonsole паттерн следующий
edem -> s0 ->s1 и затем из s0 или s1 все аккуратно перезжает в heap и так повторяется пока модель не создастся.

Какие стратегии в этом случае попробовать, чтобы улучшить положение?
Пока насколько я понял можно попробовать edem выкрутиь на максимум, и добавить памяти так чтобы в edem всегда было место для мусора а в heap места достаточно для хранения моделей.
Т.е. в edem догнать до 13Gb(дабы все могло поместиться без переезда в head),а в heap должно быть около 10Gb места для хранения моделей ( по 2Gb на 5 моделей). То бишь для сервера в таком случае выделять нужно 24Gb.

Насколько я в верном направлении и что еще можно предпринять?

PS код не мой(не поправят) работать нужно с тем что есть.

jdk1.8_140
...
Рейтинг: 0 / 0
Настроить GC у приложения
    #39742813
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой вариант GC используется? Я бы тоже в сторону эдема копал, плюс можно подумать про всякие флажки TenuringRatio и тд, может придется увеличить количество сборок перед тем как отправлять объект в survival, потому что просто большой эдем может и не помочь
...
Рейтинг: 0 / 0
Настроить GC у приложения
    #39742885
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

Java 8 - Parallel GC в 4 потока (на машине 4 процессора)
...
Рейтинг: 0 / 0
Настроить GC у приложения
    #39742908
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingПока насколько я понял можно попробовать edem выкрутиь на максимум, и добавить памяти так чтобы в edem всегда было место для мусора а в heap места достаточно для хранения моделей.
Добавить памяти - всегда полезно (физической). Ну а с выкручиванием - здесь может и наоборот решение поможет. То есть нужно просто попробовать несколько вариантов разделения. И сравнить. Стратегически выбираете направления, выводите варианты деления, пробуете, гипотеза либо подтверждается, либо нет, снова думаете стратегию, ну и т.д.
...
Рейтинг: 0 / 0
Настроить GC у приложения
    #39743181
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingХудший сценирий в зависимости от сложности этого описания, в jvm 13Gb замусорить и если запустить gc то останется около 2.5Gb живых данных. В среднем около 60-90% это мусор. Чистка занимает секунд 40-60.

Итого "мусор" == young generation (eden) == 90% от 13 Gb == 11,7 Gb
young = 11,7 Gb (one eden) + 11,7 Gb (two eden) + 1,46 (servivous,пусть 1/8 от eden) == 24,86 на young
old не может быть меньше young == 24,86 на old
итого для нормальной работы требуется минимум = 50 Gb
при классических сборшиках

llemingв среднем это 8Gb и после очистки около 1.5Gb.

8 - 1,5 = 6,5
(6,5+6,5+1/8*6,5) * 2 = 27,6

llemingТ.е в приципе 16Gb на сервере достаточно для работы порядки 5 моделей, но грузим первую после загрузки остается около 3-5Gb памяти.

Достаточно для ХРАНЕНИЯ (old gen), но не для обработки (young gen)

llemingПока насколько я понял можно попробовать edem выкрутиь на максимум
...
выделять нужно 24Gb.

Больше.

llemingНасколько я в верном направлении и что еще можно предпринять?

1)
Можно попытаться посмотреть G1. Там, вроде, обещали динамически блоки young <--> old перемаркировывать

Ну и для классических сборщиков, время простоя при copy GC young области будет сильно не маленьким. Хотя это от сервера зависит и приложения (какие задержки допустимы).

2)
Менять код, уменьшать время жизни temporary объектов

IMHO & AFAIK
...
Рейтинг: 0 / 0
Настроить GC у приложения
    #39743517
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бред написал. Eden - то один, это Servivous - два

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/sizing.html

С GC давно разбирался, ну и отвечал в 23:00 )))
...
Рейтинг: 0 / 0
Настроить GC у приложения
    #39743691
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спс

1. с G1 немного помогло, теперь подчищает понемногу в момент создания модели. График растущая пила но тем менее по крайне мере мусора меньше 50% в конце остается, и отклик в разумное время. Попробую поиграть с настройками сборщика.

2. менять код который мусорит не могу.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Настроить GC у приложения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]