Борьба с GС паузами в JVM

2,226
-1

Published on

Слайды с JavaOne 2013 Москва

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,226
On Slideshare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Борьба с GС паузами в JVM

  1. 1. Russia Development CentreDeutsche BankDeutsche BankGroup Technology & OperationsБорьба с GC паузами в JVMТеория и ПрактикаАлексей Рагозин, Deutsche Bank
  2. 2. Russia Development CentreDeutsche BankСодержание докладаТеория• Алгоритмы • Экономическая модель• Гипотеза о поколениях • Барьеры записи• Модель длительности паузПрактика• Алгоритмы HotSpot JVM • Concurrent Mark Sweep• Сайзинг JVM • Фрагментация памяти • Другие проблемы 
  3. 3. Russia Development CentreDeutsche BankDeutsche BankGroup Technology & OperationsТЕОРИЯ
  4. 4. Russia Development CentreDeutsche BankТерминологияStop-the-world (STW) pause– полная заморозка прикладных потоков JVMCompacting algorithms– алгоритмыперемещающиеобъектывпамятивоизбежаниефрагментацииParallel collection– использование многопоточности для сокращения STW паузыConcurrent collection– “фоновая” сбора мусора не требующая STW
  5. 5. Russia Development CentreDeutsche BankКак собрать “мусор”? Подсчёт ссылок Трассировка ссылок (обход графа) А зачем собирать?
  6. 6. Russia Development CentreDeutsche BankТрассирующие алгоритмыMark Sweep• Обойти граф, начиная с “корневых” ссылок• Отметить живые объекты • Просканировать память и собрать “мусор”Сборка копированием (copy collector)• Каждый достижимый объект туже копируется в новую область памяти• Ссылки на другие объекты корректируются при копированииMark Sweep Compact• Mark Sweep + перемещение объектов в ходе sweep фазы
  7. 7. Russia Development CentreDeutsche BankСборка копированиемFROMTOroots
  8. 8. Russia Development CentreDeutsche BankСборка копированиемFROMTOrootsFROMTOroots
  9. 9. Russia Development CentreDeutsche BankСборка копированиемFROMTOrootsFROMTOroots1
  10. 10. Russia Development CentreDeutsche BankСборка копированиемFROMTOrootsFROMTOroots1 2
  11. 11. Russia Development CentreDeutsche BankСборка копированиемFROMTOrootsFROMTOroots1 2
  12. 12. Russia Development CentreDeutsche BankСборка копированиемFROMTOrootsFROMTOroots1 23
  13. 13. Russia Development CentreDeutsche BankЭкономика сборки мусораS – объём кучиL – объём живых объектовCopy collection ЭффективностьMark-Sweep ЭффективностьLLScSLScLLSc 21Объѐммусора вкуче
  14. 14. Russia Development CentreDeutsche BankСлабая гипотеза о поколенияхПостулаты Большинство объектов умирают молодыми Число ссылок на молодые объекты малоСледствиеЕслихранитьмолодыеобъектыотдельноотстарых,можнообеспечитьвысокую пропускную способность (молодое поколение)и эффективное использование памяти (старое поколение).
  15. 15. Russia Development CentreDeutsche BankДемография объектов в кучеСмертность(байт/с)Возраст объектовПериод молодой сборкиПериод старой сборки∞
  16. 16. Russia Development CentreDeutsche BankGenerational collectionМолодое поколение Сборщик настроен на пропускную способностьСтарое поколение Сборщик настроен на эффективное использование памятиПродвижение (promotion) объектов в старое поколение Сборщик молодого поколения копирует живые объекты встарое поколение после достижения “зрелого” возраста
  17. 17. Russia Development CentreDeutsche BankGenerational collectionКак получить все указатели из старого поколения на молодое?Ответ – барьер на записьКаждый раз при записи указателя в память в “старом”пространстве, срабатывает барьер
  18. 18. Russia Development CentreDeutsche BankМолодая сборка HotSpot JVMEden S1 S2 TenuredDirty cardsCollect roots for young GCScan stack tracesScan dirty pages in old spaceСбор “корневых” ссылок
  19. 19. Russia Development CentreDeutsche BankМолодая сборка HotSpot JVMEden S1 S2 TenuredDirty cardsCollect roots for young GCClean cardsRecursive copy of live objects (only live objects are traversed)Копирование живых объектов
  20. 20. Russia Development CentreDeutsche BankМолодая сборка HotSpot JVMEden S1 S2 TenuredDirty cardsСборка законченаОбласти памяти, не помеченные в таблице карт,не могут содержать ссылки на молодое поколение
  21. 21. Russia Development CentreDeutsche BankФоновая маркировкаПроблема Граф объектов меняется по мере обхода ** Даже в функциональных языках могут выполнятьсяотложенные вычисления, меняющие графРешение Барьер на запись – отслеживание ссылок изменившихсяза время обхода
  22. 22. Russia Development CentreDeutsche BankФоновая маркировка Card marking write barrierHotSpot CMS, JRockit, IBM J9 Snapshot-at-the-beginning (SATB) write barrierHotSpot G1 Альтернатива барьерузаписи– барьер на чтении Azul Zing JVM
  23. 23. Russia Development CentreDeutsche BankSATB барьер записи (G1)A B C DGC AC
  24. 24. Russia Development CentreDeutsche BankSATB барьер записи (G1)A B C DGC CD
  25. 25. Russia Development CentreDeutsche BankSATB барьер записи (G1)A B C DGC CDReference queue: B DОчередь ссылок:
  26. 26. Russia Development CentreDeutsche BankSATB барьер записи (G1)A B C DGC CD
  27. 27. Russia Development CentreDeutsche BankSATB барьер записи (G1)A B C DGC DD
  28. 28. Russia Development CentreDeutsche BankSATB барьер записи (G1)A B C DGCReference queue: B DОчередь ссылок:
  29. 29. Russia Development CentreDeutsche BankSATB барьер записи (G1)A B C DGCReference queue:BDemptyОчередь ссылок: пусто
  30. 30. Russia Development CentreDeutsche BankConcurrent Mark Sweep[пауза] Сбор корневых ссылок[фон] Обход графа объектов[фон] Перемаркирова “грязных” страниц[паузa] Финальная перемаркирова[фон] Сканирование памяти (sweep)
  31. 31. Russia Development CentreDeutsche BankДлительность паузы (CMS)Young collectionScanthreadstacksScan dirty cardsReadcardtableScandirtypagesCopyliveobjectsInitialmarkScanthreadstacksScanyoungspaceRemarkScanthreadstacksScanyoungspaceScan dirty cardsReadcardtableScandirtypagesПропорционально размерустарого поколенияСтремится к константе с ростомразмера старого поколенияПропорционально размерустарого поколенияСтремится к константе с ростомразмера старого поколения
  32. 32. Russia Development CentreDeutsche BankЭкспериментhttp://blog.ragozin.info/2011/07/openjdk-patch-cutting-down-gc-pause.html
  33. 33. Russia Development CentreDeutsche BankДругие компоненты паузыВремя синхронизации в safe pointОжидание JNI блокировокСканирование стекаОбработка ссылок• Weak • Soft • JNI • Finalizers
  34. 34. Russia Development CentreDeutsche BankDeutsche BankGroup Technology & OperationsПрактика
  35. 35. Russia Development CentreDeutsche Bank“Боевые” настройки JVMHotSpot JVMConcurrent Mark Sweep алгоритмСайзинг памяти под приложение
  36. 36. Russia Development CentreDeutsche BankСайзинг -Xmx = -Xms -Xmx = размер старого + размер молодого -Xmn = размер молодого Старое поколение: Данные приложения (jmap –histo) Запас 30-50% на фоновую сборку и фрагментацию
  37. 37. Russia Development CentreDeutsche BankТонкая подстройка CMS Поиск оптимальных параметров молодой сборки -XX:CMSWaitDuration=N -XX:+CMSScavengeBeforeRemark Инкрементальный или нет? Выгружать классы или нет?http://blog.ragozin.info/2011/07/gc-check-list-for-data-grid-nodes.html
  38. 38. Russia Development CentreDeutsche BankФрагментация
  39. 39. Russia Development CentreDeutsche BankФрагментацияПоследствия фрагментации Однопоточный STM Mark Sweep Compact Очень долгое promotion failure recoveryБольше памяти – самый эффективный способ борьбы сфрагментацией
  40. 40. Russia Development CentreDeutsche BankДругие проблемы Свопинг – (Javaисвопинг–вещинесовместные) Reference abuse Медленные сейвпоинты Прямой доступ к памяти через JNI
  41. 41. Russia Development CentreDeutsche BankDeutsche BankGroup Technology & OperationsСпасибоАлексей Рагозин, Deutsche Bankhttp://blog.ragozin.info - мои статьи о JVM и не только

×