Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
05.12.2018, 12:53
|
|||
---|---|---|---|
Настроить GC у приложения |
|||
#18+
Проблема, есть метод который жутко мусорит в 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2018, 13:39
|
|||
---|---|---|---|
Настроить GC у приложения |
|||
#18+
какой вариант GC используется? Я бы тоже в сторону эдема копал, плюс можно подумать про всякие флажки TenuringRatio и тд, может придется увеличить количество сборок перед тем как отправлять объект в survival, потому что просто большой эдем может и не помочь ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2018, 15:09
|
|||
---|---|---|---|
Настроить GC у приложения |
|||
#18+
забыл ник, Java 8 - Parallel GC в 4 потока (на машине 4 процессора) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2018, 15:38
|
|||
---|---|---|---|
Настроить GC у приложения |
|||
#18+
llemingПока насколько я понял можно попробовать edem выкрутиь на максимум, и добавить памяти так чтобы в edem всегда было место для мусора а в heap места достаточно для хранения моделей. Добавить памяти - всегда полезно (физической). Ну а с выкручиванием - здесь может и наоборот решение поможет. То есть нужно просто попробовать несколько вариантов разделения. И сравнить. Стратегически выбираете направления, выводите варианты деления, пробуете, гипотеза либо подтверждается, либо нет, снова думаете стратегию, ну и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2018, 23:16
|
|||
---|---|---|---|
|
|||
Настроить GC у приложения |
|||
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.12.2018, 14:32
|
|||
---|---|---|---|
|
|||
Настроить GC у приложения |
|||
#18+
Бред написал. Eden - то один, это Servivous - два https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/sizing.html С GC давно разбирался, ну и отвечал в 23:00 ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.12.2018, 16:45
|
|||
---|---|---|---|
Настроить GC у приложения |
|||
#18+
спс 1. с G1 немного помогло, теперь подчищает понемногу в момент создания модели. График растущая пила но тем менее по крайне мере мусора меньше 50% в конце остается, и отклик в разумное время. Попробую поиграть с настройками сборщика. 2. менять код который мусорит не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=59&mobile=1&tid=2121614]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 167ms |
0 / 0 |