SlideShare a Scribd company logo
ОПТИМИЗАЦИЯ
ПОТРЕБЛЕНИЯ ПАМЯТИ В JAVA
делаем уборку правильно
12 ноября 2016
Евгений Берлог
EPAM Systems
Senior Software Engineer
2
3
4
ОСОБЕННОСТИ ЗАДАЧИ
# REST + MongoDB
# Жесткие требования к времени ответа
# Stateless
5
УСЛОВИЯ ТЕСТИРОВАНИЯ
# 10000 URL с реального окружения
# ~30 вызовов в секунду (реальная нагрузка + 50%)
ЗАМЕРЫ УСПЕШНОСТИ
# Максимальная пауза
# Пропускная способность
# Частота Full GC
Оптимизация потребления памяти в Java - делаем уборку правильно
7
Исходные замеры
Максимальнаяпауза Пропускнаяспособность ЧастотаFullGC
1918мс 99.0% 5развчас
НЕМНОГО ТЕОРИИ
9
Распределение памяти
10
Первая сборка
11
Вторая сборка
12
Как происходит старение
13
Большая сборка
ГИПОТЕЗА
О СТАРЕНИИ ОБЪЕКТОВ
ГИПОТЕЗА О СТАРЕНИИ
ОБЪЕКТОВ
Время жизни
Размеробъектов
16
НО РЕАЛЬНАЯ И
ТЕОРЕТИЧЕСКАЯ
СИТУАЦИИ РАЗЛИЧАЮТСЯ
17
НО РЕАЛЬНАЯ И
ТЕОРЕТИЧЕСКАЯ
СИТУАЦИИ РАЗЛИЧАЮТСЯ
КАК
МОНИТОРИТЬ
СИТУАЦИЮ ?
19
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintTenuringDistribution
20
Вывод детализированного сообщения после каждого
запуска Garbage Collector’а.
-XX:+PrintGCDetails
dsc2016
[PSYoungGen: 1559493K->93696K(1610752K)] 2771413K->1379948K(5106176K),
0.1586049 secs]
21
-XX:+PrintGCTimeStamps
dsc2016
1914.990: [GC
[PSYoungGen: 1559493K->93696K(1610752K)] 2771413K->1379948K(5106176K),
0.1586049 secs]
Добавление в каждую GC-запись времени
относительно старта JVM.
22
-XX:+PrintTenuringDistribution
dsc2016
Desired survivor size 134217728 bytes, new threshold 15 (max 15)
Вывод в лог порога старения объектов и
необходимого размера Survivor региона.
23
1914.990: [GC
Desired survivor size 134217728 bytes, new threshold 1 (max 15)
[PSYoungGen: 1559493K->93696K(1610752K)] 2771413K->1379948K(5106176K),
0.1586049 secs]
1932.209: [GC
Desired survivor size 136839168 bytes, new threshold 1 (max 15)
[PSYoungGen: 1569792K->53234K(1611776K)] 2856044K->1408182K(5107200K),
0.1083012 secs]
dsc2016
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintTenuringDistribution
Оптимизация потребления памяти в Java - делаем уборку правильно
ADAPTIVE SIZE POLICY
26
ADAPTIVE SIZE POLICY – это попытка
JVM реорганизовать память с целью достичь
(#1) уменьшения GC паузы;
(#2) увеличения пропускной способности;
(#3) уменьшения footprint’а.
-XX:AdaptiveSizePolicyOutputInterval=1
27
ЛОГИ GC С ВКЛЮЧЕННЫМ ASP
UseAdaptiveSizePolicy actions to meet *** reduced footprint ***
GC overhead (%)
Young generation: 1.26 (attempted to shrink)
Tenured generation: 0.00 (no change)
Tenuring threshold: (attempted to decrease to balance GC costs) = 2
dsc2016
28
ЛОГИ GC С ВКЛЮЧЕННЫМ ASP
UseAdaptiveSizePolicy actions to meet *** reduced footprint ***
GC overhead (%)
Young generation: 1.26 (attempted to shrink)
Tenured generation: 0.00 (no change)
Tenuring threshold: (attempted to decrease to balance GC costs) = 2
dsc2016
Оптимизация потребления памяти в Java - делаем уборку правильно
30
Эксперимент #1:
Указываем максимальную задержку
-XX:GCTimeRatio=999
// по умолчанию 99
-XX:MaxGCPauseMillis=100
// по умолчанию не ограничен
Оптимизация потребления памяти в Java - делаем уборку правильно
32
Результат для максимальной
задержки
Максимальнаяпауза Пропускнаяспособность ЧастотаFullGC
2092мс 99.0% 5развчас
Оптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильно
# Выключаем Adaptive Size Policy
# Уменьшаем Old Generation
# Максимум на Eden
# Экспериментально высчитываем Survivor Size
35
Эксперимент #2:
Дальше не по правилам
36
Эксперимент #2:
Дальше не по правилам
-XX:-UseAdaptiveSizePolicy
-Xmx5G -Xms5G
-Xmn4300M
-XSurvivorRatio=6
Оптимизация потребления памяти в Java - делаем уборку правильно
38
Результат c выключенным
Adaptive Size Policy
Максимальнаяпауза Пропускнаяспособность ЧастотаFullGC
1683мс 99.3% 1разв3.5часов
39
Максимальнаяпауза Пропускнаяспособность ЧастотаFullGC
Базовыенастройки 1918МС 99.0% 5развчас
Максимальнаяпауза 2092МС 99.0% 5развчас
ВыключенныйASP 1683МС 99.3% 1разв3.5часов
Промежуточный результат
- Может пора остановиться?
Concurrent Mark Sweep
Collector
42
Concurrent Mark Sweep (CMS) Collector
# То же распределение регионов, что и в Parallel
# Тот же алгоритм, что и в Parallel для младшего
поколения
# Часть работы в старшем поколении
выполняется параллельно
# Больше footprint, чем в Parallel
Оптимизация потребления памяти в Java - делаем уборку правильно
44
Эксперимент #3:
Меняем GC!
-XX:+UseConcMarkSweepGC
-Xmx5G -Xms5G -Xmn4300M
-XX:SurvivorRatio=2
Оптимизация потребления памяти в Java - делаем уборку правильно
46
Максимальнаяпауза Пропускнаяспособность ЧастотаFullGC
283мс 99.2% 1разв4часа
Результат c новым GC
47
dsc2016
: 1460888K->10522K(1595776K), 0.0049030 secs] 1697910K->247592K(2210176K),
0.0049871 secs]
1195.459: [GC1195.459: [ParNew
Desired survivor size 74252288 bytes, new threshold 15 (max 15)
- age 1: 690016 bytes, 690016 total
- age 2: 148448 bytes, 838464 total
- age 3: 751056 bytes, 1589520 total
...
- age 13: 82512 bytes, 3801784 total
- age 14: 607816 bytes, 4409600 total
- age 15: 1348728 bytes, 5758328 total
Анализ логов CMS
...
- age 13: 82512 bytes, 3801784 total
- age 14: 607816 bytes, 4409600 total
- age 15: 1348728 bytes, 5758328 total
15299.307: [GC [1 CMS-initial-mark: 581268K(839680K)] 1241313K(4142080K),
0.2830091 secs]
15306.520: [GC[YG occupancy: 1031447 K (3302400 K)]15306.520: [Rescan
(parallel) , 0.2487740 secs]15306.769: [weak refs processing, 0.0012183
secs]15306.770: [scrub string table, 0.0012292 secs] [1 CMS-remark:
581268K(839680K)] 1612715K(4142080K), 0.2518813 secs]
...
- age 13: 82512 bytes, 3801784 total
- age 14: 607816 bytes, 4409600 total
- age 15: 1348728 bytes, 5758328 total
15299.307: [GC [1 CMS-initial-mark: 581268K(839680K)] 1241313K(4142080K),
0.2830091 secs]
15306.520: [GC[YG occupancy: 1031447 K (3302400 K)]15306.520: [Rescan
(parallel) , 0.2487740 secs]15306.769: [weak refs processing, 0.0012183
secs]15306.770: [scrub string table, 0.0012292 secs] [1 CMS-remark:
581268K(839680K)] 1612715K(4142080K), 0.2518813 secs]
50
Максимальнаяпауза Пропускнаяспособность ЧастотаFullGC
cms 283МС 99.2% 1разв4часа
parallel 1681МС 99.3% 1разв3.5часов
CMS vs PARALLEL
51
Почему не G1?
> G1 рекомендуется использовать при
размерах heap’а от 6ГБ
Оптимизация потребления памяти в Java - делаем уборку правильно
53
Эксперимент #4:
Используем сборщик G1
-XX:UseG1GC
Оптимизация потребления памяти в Java - делаем уборку правильно
55
Максимальнаяпауза Пропускнаяспособность ЧастотаFullGC
351мс 95.9% ?
Результат c использованием G1
Оптимизация потребления памяти в Java - делаем уборку правильно
57
Максимальнаяпауза Пропускнаяспособность
Parallel 1681МС 99.3%
G1 351МС 95.9%
cms 283МС 99.2%
Долгожданный победитель
58
Максимальнаяпауза ПРопускнаяспособность
Parallel 1681МС 99.3%
G1 351МС 95.9%
cms 283МС 99.2%
Долгожданный победитель
Оптимизация потребления памяти в Java - делаем уборку правильно

More Related Content

PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PDF
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PPTX
Скорость с доставкой до пользователя
ODP
VDS: обнаружение, выявление причин и устранение проблемных ситуаций. Диагнос...
PDF
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
PDF
Платформа для видео сроком в квартал. Александр Тоболь.
PDF
PostgreSQL Streaming Replication
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Скорость с доставкой до пользователя
VDS: обнаружение, выявление причин и устранение проблемных ситуаций. Диагнос...
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Платформа для видео сроком в квартал. Александр Тоболь.
PostgreSQL Streaming Replication

What's hot (20)

PDF
Марина Широчкина: Верстка. Вид снизу
ODP
AnyEvent::HTTPBenchmark
PDF
"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)
PDF
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
PDF
Реклама со скоростью света. Презентация Сергея Жемжицкого на High Load++ 2014
PDF
Call of Postgres: Advanced Operations (part 2)
PPT
Eugene Lisitsky Web Sockets
PDF
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
PDF
PostgreSQL Vacuum: Nine Circles of Hell
PDF
Call of Postgres: Advanced Operations (part 3)
ODP
PPT
Eugene Lisitsky Web Sockets
PPT
Web sockets
ODP
настройка Free Bsd для обслуживания 100 200 тысяч соединений игорь сысоев
PDF
13 встреча — Сжатие данных (Р. Одинцов)
PPT
Админская_паранойя_в_быту
PDF
Call of Postgres: Advanced Operations (part 1)
PPTX
Reactive UI на C#
PDF
Call of Postgres: Advanced Operations (part 5)
Марина Широчкина: Верстка. Вид снизу
AnyEvent::HTTPBenchmark
"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Реклама со скоростью света. Презентация Сергея Жемжицкого на High Load++ 2014
Call of Postgres: Advanced Operations (part 2)
Eugene Lisitsky Web Sockets
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
PostgreSQL Vacuum: Nine Circles of Hell
Call of Postgres: Advanced Operations (part 3)
Eugene Lisitsky Web Sockets
Web sockets
настройка Free Bsd для обслуживания 100 200 тысяч соединений игорь сысоев
13 встреча — Сжатие данных (Р. Одинцов)
Админская_паранойя_в_быту
Call of Postgres: Advanced Operations (part 1)
Reactive UI на C#
Call of Postgres: Advanced Operations (part 5)
Ad

Viewers also liked (11)

PDF
Тестируем тесты с PIT (мутационное тестирование)
PDF
Соревнования по программированию
PDF
Строим плот - Как не утонуть в данных
PDF
Разработка в долг
PDF
ES2015+: давно пора!
PDF
Жизнь после promises
PDF
Собираем будильник правильно
PDF
Виртуализация
PDF
Blockchain: is just buzzword?
PDF
TEDx Manchester: AI & The Future of Work
PDF
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
Тестируем тесты с PIT (мутационное тестирование)
Соревнования по программированию
Строим плот - Как не утонуть в данных
Разработка в долг
ES2015+: давно пора!
Жизнь после promises
Собираем будильник правильно
Виртуализация
Blockchain: is just buzzword?
TEDx Manchester: AI & The Future of Work
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
Ad

Similar to Оптимизация потребления памяти в Java - делаем уборку правильно (13)

PDF
"Диагностирование проблем и настройка GC в HotSpot JVM" (JEEConf, Киев, 2011)
PDF
Об одной неприятной проблеме сборщика Concurrent Mark-Sweep, Кирилл Голоднов
PDF
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
PDF
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012
PDF
Java GC tuning and monitoring (by Alexander Ashitkin)
PPTX
Solit 2013, JVM изнутри: оптимизация и профилирование, Слисенко Константин
PDF
Как мы храним 75 млн пользователей (Денис Бирюков)
PPTX
Тестируем производительность распределённых систем, Александр Киров (Parallels)
PDF
Экстремальная оптимизация производительности на примере MongoDB Java Driver
PDF
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
PPTX
Developing highload servers with Java
PDF
Java Platform Performance BoF
"Диагностирование проблем и настройка GC в HotSpot JVM" (JEEConf, Киев, 2011)
Об одной неприятной проблеме сборщика Concurrent Mark-Sweep, Кирилл Голоднов
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012
Java GC tuning and monitoring (by Alexander Ashitkin)
Solit 2013, JVM изнутри: оптимизация и профилирование, Слисенко Константин
Как мы храним 75 млн пользователей (Денис Бирюков)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Developing highload servers with Java
Java Platform Performance BoF

More from Vitebsk DSC (18)

PDF
Community-Z
PDF
How to exceed Customer's expectations by delivery complicated ML+RPA project
PDF
Аджайл майндсет. Что разрушает вашу команду?
PDF
Микросервисы со Spring Boot & Spring Cloud
PDF
Тестирование больших данных
PDF
Amazon SQS или не все костыли одинаково бесполезны
PDF
Amazon Athena overview
PDF
Typical BA Mistakes ​in documentation
PDF
Boring is Fun!
PDF
На пути к совершенному инжинирингу
PDF
Чего же ты хочешь, человек?
PDF
Растем вместе с eKIDS
PDF
Технологии беспилотных автомобилей
PDF
Управляем эволюцией на лету
PDF
Выбираем стратегию создания бранчей
PDF
Reactive programming для успеха вашего стартапа
PDF
Проблемы с производительностью приложений на AngularJS и способы их решения
PDF
Микросервисы на практике
Community-Z
How to exceed Customer's expectations by delivery complicated ML+RPA project
Аджайл майндсет. Что разрушает вашу команду?
Микросервисы со Spring Boot & Spring Cloud
Тестирование больших данных
Amazon SQS или не все костыли одинаково бесполезны
Amazon Athena overview
Typical BA Mistakes ​in documentation
Boring is Fun!
На пути к совершенному инжинирингу
Чего же ты хочешь, человек?
Растем вместе с eKIDS
Технологии беспилотных автомобилей
Управляем эволюцией на лету
Выбираем стратегию создания бранчей
Reactive programming для успеха вашего стартапа
Проблемы с производительностью приложений на AngularJS и способы их решения
Микросервисы на практике

Оптимизация потребления памяти в Java - делаем уборку правильно