42
Russia Development Centre Deutsche Bank Deutsche Bank Group Technology & Operations Сборка мусора в JVM Битва алгоритмов Алексей Рагозин JPoint 2014

Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Deutsche BankGroup Technology & Operations

Сборка мусора в JVMБитва алгоритмов

Алексей Рагозин

JPoint 2014

Page 2: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Новый претендент в OpenJDK

ShenandoahНовый алгоритм сборки мусора в OpenJDK• http://icedtea.classpath.org/shenandoah/

• http://openjdk.java.net/jeps/189

• http://rkennke.wordpress.com/

• http://christineflood.wordpress.com/

• http://rkennke.files.wordpress.com/2014/02/shenandoahtake4.pdf

Page 3: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Цели

Паузы < 10 ms на куче 100 GiB и больше▪ Single space

▪ Инкрементальный▪ Фоновая маркировка▪ Фоновое копирование▪ SATB барьер▪ Таблица карт▪ Remembered sets

Page 4: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Обоснование

Сборка поколений требует отслеживания ссылок между поколениями▪ Таблица карт – false sharing

▪ Remembered set – требует много памяти▪ Нет поколений - нет проблем

Page 5: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Карточный барьер

Page 6: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Карточный барьер

Page 7: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Карточный барьер

Page 8: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Карточный барьер

Page 9: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Карточный барьер

Page 10: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Карточный барьер

Page 11: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Обоснование

SATB барьер для фоновой маркировки▪ Таблица карт

➢ false sharing

➢ STW пауза для ремаркировки▪ SATB – маркировка без пауз

Page 12: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

SATB барьер

Page 13: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

SATB барьер

Page 14: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

SATB барьер

Page 15: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

SATB барьер

Page 16: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

SATB барьер

Page 17: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

SATB барьер

Page 18: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

SATB барьер

Page 19: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Обоснование

Фоновое копирование▪ Brooks[1] style barrier – барьер на чтение▪ Forwarding pointers

▪ Копирование при записи▪ Фоновое копирование▪ Меньшая нагрузка на прикладные потоки

[1] Rodney A. Brooks “Trading Data Space for Reduced Time and Code Space in Real-Time Garbage Collection on Stock Hardware” 1984 Symposium on Lisp and Functional Programming

Page 20: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Алгоритм “метроном”

Page 21: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Алгоритм “метроном”

Page 22: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Алгоритм “метроном”

Page 23: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Алгоритм “метроном”

Page 24: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Алгоритм “метроном”

Page 25: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Алгоритм “метроном”

Page 26: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Алгоритм “метроном”

Page 27: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Фоновое копирование

FROM TO

Page 28: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Фоновое копирование

FROM TO

Page 29: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Алгоритм “Shenandoah”

➢ Сборка корневых ссылок - STW

➢ Маркировка➢ Выбор регионов для сборки➢ Копирование при записи

➢ Копирование➢ Сборка корневых ссылок➢ Маркировка➢ Выбор регионов для сборки➢ Копирование при записи…

Page 30: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Алгоритм “Shenandoah”

Критика▪ Single space✓ Работает только если приложение не создаёт мусор

▪ Инкрементальная сборка✓ Фрагментация больших объектов✓ Фрагментация малых средних объектов не актуальна на

больших (~100 GiB) кучах▪ Производительность✓ Read barrier + write barrier

Page 31: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

HotSpot JVM и паузы

JVM Sizing!Hardware

Off-heapLow garbage

codingYoung GC

Concurrent mark sweepYoung GC Fragmentation

Concurrent mark sweep / G1Fragmentation

Page 32: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

HotSpot JVM и паузы

Page 33: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

G1 плюсы и минусы

G1 – адаптивное управление паузами

Page 34: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

G1 плюсы и минусы

Плюсы▪ Адаптивная стратегия сборок▪ Параллельный Full GC

Минусы▪ STW копирование – длинные паузы▪ Фрагментация (объекты больше региона)

▪ Пропускная способность▪ Всё ещё в процессе разработки!

Page 35: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

CMS плюсы и минусы

Плюсы• Фоновая сборка• Малые паузы• Хорошая пропускная способность• Малый оверхед по памятиМинусы• Фрагментация – легко лечится• Однопоточный Full GC

• Синдром “аномальных пауз”• Заброшен

Нужно правильно

готовить!

Page 36: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

CMS: Реальная проблема

http://blog.ragozin.info/2013/06/java-gc-in-numbers-parallel-young.html

Page 37: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

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

Page 38: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

CMS: Реальная проблема

http://blog.ragozin.info/2011/07/openjdk-patch-cutting-down-gc-pause.html

Page 39: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

CMS: А как насчёт фрагментации?

http://blog.ragozin.info/2011/10/cms-heap-fragmentation-follow-up-1.html

Page 40: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Секрет борьбы с паузами GC

Page 41: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Секрет тюнинга GC

Чтобы освободить память от мусора– нужна память чтобы её замусорить!

-Xmn<N> -Xms<M> -Xmx<M>

Page 42: Сборка мусора в JVM Битва алгоритмов · HotSpot JVM и паузы JVM Sizing! Hardware Low garbage Off-heap coding Young GC Concurrent mark sweep Young

Russia Development Centre

Deutsche Bank

Спасибо!

Алексей Рагозин[email protected]

http://blog.ragozin.info