Coherence SIG: Advanced usage of indexes in coherence
Борьба с GС паузами в JVM
1. Russia Development Centre
Deutsche Bank
Deutsche Bank
Group Technology & Operations
Борьба с GC паузами в JVM
Теория и Практика
Алексей Рагозин, Deutsche Bank
2. Russia Development Centre
Deutsche Bank
Содержание доклада
Теория
• Алгоритмы • Экономическая модель
• Гипотеза о поколениях • Барьеры записи
• Модель длительности пауз
Практика
• Алгоритмы HotSpot JVM • Concurrent Mark Sweep
• Сайзинг JVM • Фрагментация памяти • Другие проблемы
4. Russia Development Centre
Deutsche Bank
Терминология
Stop-the-world (STW) pause
– полная заморозка прикладных потоков JVM
Compacting algorithms
– алгоритмыперемещающиеобъектывпамятивоизбежаниефрагментации
Parallel collection
– использование многопоточности для сокращения STW паузы
Concurrent collection
– “фоновая” сбора мусора не требующая STW
6. Russia Development Centre
Deutsche Bank
Трассирующие алгоритмы
Mark Sweep
• Обойти граф, начиная с “корневых” ссылок
• Отметить живые объекты • Просканировать память и собрать “мусор”
Сборка копированием (copy collector)
• Каждый достижимый объект туже копируется в новую область памяти
• Ссылки на другие объекты корректируются при копировании
Mark Sweep Compact
• Mark Sweep + перемещение объектов в ходе sweep фазы
13. Russia Development Centre
Deutsche Bank
Экономика сборки мусора
S – объём кучи
L – объём живых объектов
Copy collection
Эффективность
Mark-Sweep
Эффективность
L
LS
c
S
LS
c
L
LS
c 21
Объѐм
мусора в
куче
14. Russia Development Centre
Deutsche Bank
Слабая гипотеза о поколениях
Постулаты
Большинство объектов умирают молодыми
Число ссылок на молодые объекты мало
Следствие
Еслихранитьмолодыеобъектыотдельноотстарых,можнообеспечить
высокую пропускную способность (молодое поколение)
и эффективное использование памяти (старое поколение).
15. Russia Development Centre
Deutsche Bank
Демография объектов в куче
Смертность(байт/с)
Возраст объектов
Период молодой сборки
Период старой сборки
∞
16. Russia Development Centre
Deutsche Bank
Generational collection
Молодое поколение
Сборщик настроен на пропускную способность
Старое поколение
Сборщик настроен на эффективное использование памяти
Продвижение (promotion) объектов в старое поколение
Сборщик молодого поколения копирует живые объекты в
старое поколение после достижения “зрелого” возраста
17. Russia Development Centre
Deutsche Bank
Generational collection
Как получить все указатели из старого поколения на молодое?
Ответ – барьер на запись
Каждый раз при записи указателя в память в “старом”
пространстве, срабатывает барьер
18. Russia Development Centre
Deutsche Bank
Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Collect roots for young GC
Scan stack traces
Scan dirty pages in old space
Сбор “корневых” ссылок
19. Russia Development Centre
Deutsche Bank
Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Collect roots for young GC
Clean cards
Recursive copy of live objects (only live objects are traversed)
Копирование живых объектов
20. Russia Development Centre
Deutsche Bank
Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Сборка закончена
Области памяти, не помеченные в таблице карт,
не могут содержать ссылки на молодое поколение
21. Russia Development Centre
Deutsche Bank
Фоновая маркировка
Проблема
Граф объектов меняется по мере обхода *
* Даже в функциональных языках могут выполняться
отложенные вычисления, меняющие граф
Решение
Барьер на запись – отслеживание ссылок изменившихся
за время обхода
22. Russia Development Centre
Deutsche Bank
Фоновая маркировка
Card marking write barrier
HotSpot CMS, JRockit, IBM J9
Snapshot-at-the-beginning (SATB) write barrier
HotSpot G1
Альтернатива барьерузаписи– барьер на чтении
Azul Zing JVM
30. Russia Development Centre
Deutsche Bank
Concurrent Mark Sweep
[пауза] Сбор корневых ссылок
[фон] Обход графа объектов
[фон] Перемаркирова “грязных” страниц
[паузa] Финальная перемаркирова
[фон] Сканирование памяти (sweep)
31. Russia Development Centre
Deutsche Bank
Длительность паузы (CMS)
Young collection
Scan
thread
stacks
Scan dirty cards
Read
card
table
Scan
dirty
pages
Copy
live
objects
Initial
mark
Scan
thread
stacks
Scan
young
space
Remark
Scan
thread
stacks
Scan
young
space
Scan dirty cards
Read
card
table
Scan
dirty
pages
Пропорционально размеру
старого поколения
Стремится к константе с ростом
размера старого поколения
Пропорционально размеру
старого поколения
Стремится к константе с ростом
размера старого поколения
33. Russia Development Centre
Deutsche Bank
Другие компоненты паузы
Время синхронизации в safe point
Ожидание JNI блокировок
Сканирование стека
Обработка ссылок
• Weak • Soft • JNI • Finalizers
35. Russia Development Centre
Deutsche Bank
“Боевые” настройки JVM
HotSpot JVM
Concurrent Mark Sweep алгоритм
Сайзинг памяти под приложение
36. Russia Development Centre
Deutsche Bank
Сайзинг
-Xmx = -Xms
-Xmx = размер старого + размер молодого
-Xmn = размер молодого
Старое поколение:
Данные приложения (jmap –histo)
Запас 30-50% на фоновую сборку и фрагментацию
37. Russia Development Centre
Deutsche Bank
Тонкая подстройка CMS
Поиск оптимальных параметров молодой сборки
-XX:CMSWaitDuration=N
-XX:+CMSScavengeBeforeRemark
Инкрементальный или нет?
Выгружать классы или нет?
http://blog.ragozin.info/2011/07/gc-check-list-for-data-grid-nodes.html
39. Russia Development Centre
Deutsche Bank
Фрагментация
Последствия фрагментации
Однопоточный STM Mark Sweep Compact
Очень долгое promotion failure recovery
Больше памяти – самый эффективный способ борьбы с
фрагментацией
40. Russia Development Centre
Deutsche Bank
Другие проблемы
Свопинг – (Javaисвопинг–вещинесовместные)
Reference abuse
Медленные сейвпоинты
Прямой доступ к памяти через JNI
41. Russia Development Centre
Deutsche Bank
Deutsche Bank
Group Technology & Operations
Спасибо
Алексей Рагозин, Deutsche Bank
http://blog.ragozin.info - мои статьи о JVM и не только