Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java GC tuning and monitoring (by Alexander Ashitkin)

10,500 views

Published on

Slide deck from meetup 17 Dec 2013 at Moscow

Published in: Technology

Java GC tuning and monitoring (by Alexander Ashitkin)

  1. 1. Deutsche Bank Мониторинг и оптимизация GC AutobahnFX
  2. 2. Содержание • • • Мониторинг в AutobahnFX Имплементация мониторинга GC Настройка GC Deutsche Bank Identifier 12/20/2013 9:22:11 AM Speaker name Name of event/date 2010 DB Blue template 1
  3. 3. Мониторинг GC. Сбор информации GC logs [GC [ParNew: 120772K->6167K(132736K), 0.0719593 secs] 120772K->8703K(4179584K), 0.0723518 secs] Total time for which application threads were stopped: 0.0750889 seconds JMX GarbageCollectorMXBean long getCollectionCount() Returns the total number of collections that have occurred. long getCollectionTime() Returns the approximate accumulated collection elapsed time in milliseconds. + MemoryPoolMXBean Command line tools $> jstat –gc $pid 1000 S0C S1C 3008.0 3072.0 588 S0U 0.0 S1U EC EU OC 1511.1 343360.0 46383.0 OU PC PU 699072.0 283690.2 75392.0 YGC YGCT 41064.3 FGC 2540 FGCT 18.454 4 GCT 1.133 19. JVM instrumentation Deutsche Bank Identifier 12/20/2013 9:22:11 AM Speaker name Name of event/date 2010 DB Blue template 2
  4. 4. Мониторинг GC. Что выбрать • • • • GC logs: нужен парсер, парсер нужно ранить JMX: воздействует на процесс, poor API Command line tools: воздействует на процесс, нужен парсер + scheduler JVM instrumentation(profiler): воздействует на процесс, проприетарны Deutsche Bank Identifier 12/20/2013 9:22:12 AM Speaker name Name of event/date 2010 DB Blue template 3
  5. 5. Мониторинг GC. Имплементация. GC log Типичная запись в логе GC 2013-12-16T08:50:06.258+0000: [GC [ParNew: 59008K->6528K(59008K), 0.0350483 secs] 212101K->169696K(517760K), 0.0354169 secs] [Times: user=0.05 sys=0.00, real =0.04 secs] Total time for which application threads were stopped: 0.0372835 seconds Total time for which application threads were stopped: 0.0007363 seconds Input parameters — 59008K – young gen before gc (y1) — 6528K – young gen after GC (y2) — 212101K – heap size before GC (h1) — 169696K - heap size after GC (h2) — 0.0372835(+) - VM stop times Captured Parameters heap cleaned (42405) = h2 (212101) - h1 (169696) new gen cleaned (52480) = y2 (59008) - y1 (6528) gc promoted (10075) = new gen swapped - heap collected Deutsche Bank Identifier 12/20/2013 9:22:12 AM Speaker name Name of event/date 2010 DB Blue template 4
  6. 6. Мониторинг GC. Что мониторится Величина GC пауз GC overhead Deutsche Bank Identifier 12/20/2013 9:22:12 AM Speaker name Name of event/date 2010 DB Blue template 5
  7. 7. Мониторинг GC. Что мониторится Нагрузка на GC Heap Size Deutsche Bank Identifier 12/20/2013 9:22:12 AM Speaker name Name of event/date 2010 DB Blue template 6
  8. 8. Мониторинг GC. Имплементация. AutobahnFX monitoring portals • RRD based web portal • Geneos Deutsche Bank Identifier 12/20/2013 9:22:12 AM Speaker name Name of event/date 2010 DB Blue template 7
  9. 9. Мониторинг GC. Снимок 1 дня Deutsche Bank Identifier 12/20/2013 9:22:14 AM Speaker name Name of event/date 2010 DB Blue template 8
  10. 10. Мониторинг GC. Снимок 1 года Deutsche Bank Identifier 12/20/2013 9:22:14 AM Speaker name Name of event/date 2010 DB Blue template 9
  11. 11. Мониторинг GC. Имплементация. RRD Достоинства - Надежные well-known технологии (apache+perl+shell+rrd) - Высокая производительность - Низкое потребление диского пространства - Защита от переполнения - Встроенные средства визуализации - Встроенные статистические функции Недостатки - Данные агрегируются, raw данные недоступны http://oss.oetiker.ch/rrdtool Deutsche Bank Identifier 12/20/2013 9:22:14 AM Speaker name Name of event/date 2010 DB Blue template 10
  12. 12. Мониторинг GC. Имплементация. RRD Deutsche Bank Identifier 12/20/2013 9:22:14 AM Speaker name Name of event/date 2010 DB Blue template 11
  13. 13. Мониторинг GC. Имплементация. Geneos Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 12
  14. 14. Мониторинг GC. Имплементация. Geneos Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 13
  15. 15. Мониторинг GC. Имплементация. Geneos Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 14
  16. 16. Deutsche Bank Настройка GC AutobahnFX
  17. 17. Настройка GC Зачем настраивать? •Достигнуть опеределенной величины паузы (max stop time < n millis) •Улучшить GC в существующем приложении •Устранить проблему (периодические большие стоп таймы и тп) Параметры от которых зависит производительность GC •Характер мусора, генерируемый приложением •Магические параметры JVM •Железо •Версия JVM •Рантайм окружение Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 16
  18. 18. Настройка GC. CMS Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 17
  19. 19. Настройка GC. Общие правила Правила которым следуют в AutobahnFX: • gc лог обязателен • Детерминированное поведение GC. (Max=Initial для Xmx, PermGen, NewSize) • CMSInitiatingOccupancyFraction - обязателен • +UseCMSInitiatingOccupancyOnly • +CMSScavengeBeforeRemark • TenuringThreshold=1 • +DisableExplicitGC Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 18
  20. 20. Настройка GC. CMS. Young Parallel GC Глобальная стратегия: Throughput oriented, gc pause < threshold, minimal promotion Основные параметры оптимизации •NewSize – время паузы, promotion •SurvivorRatio - promotion •ParallelGCThreads – время паузы •Xmx – время паузы, overhead, стабильность Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 19
  21. 21. Настройка GC. Методика • • • • • • • Используйте prod-like hardware Используйте prod-like нагрузку Используйте prod-like garbage Выставите интересующий параметр Сохраните лог под уникальным именем используя -Xloggc:<file> Измените оптимизируемый параметр, повторите Загрузите лог в gchisto Gchisto https://java.net/projects/gchisto Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 20
  22. 22. Настройка GC. New Size. GcHisto Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 21
  23. 23. Настройка GC. New Size. Overhead Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 22
  24. 24. Настройка GC. NewSize. Pause Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 23
  25. 25. Настройка GC. NewSize Чем больше Eden: - больше паузы - меньше overhead - меньше gc promotion - больше sigma пауз Главный риск undersized Eden ConcurrentModeFailure + OutOfMemory AutobahnFX choice: Максимально приемлимый Eden Size Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 24
  26. 26. Настройка GC. ParallelGCThreads SLES Intel(R) Xeon(R) CPU X5690 2 physical cpus * 6 cores * 2 virtual cores = 24 available cores Формула от Sun/Oracle: ParallelGCThreads <= (ncpus <= 8) ? ncpus : 3 + ((ncpus * 5) / 8) 2 cpus = 2 threads 12 cpus = 10 threads 24 cpus = 18 threads Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 25
  27. 27. Настройка GC. Parallel GC threads Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 26
  28. 28. Настройка GC. ParallelGCThreads Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 27
  29. 29. Настройка GC. ParallelGCThreads Выводы Начиная с определенного момента прирост от количества трэдов минимален В формуле для расчета числа трэдов необходимо подставлять число физических ядер, без HT AutobhanFX policy Не ставить максимальный ParallelGCThreads, особенно если процесс на боксе не один * необходимо оставлять доступный CPU параллельно выполняющимся приложениям ** При увеличении числа new gen трэдов добавляются дополнительные CMS трэды (CMS numthreads = 1 + ParallelGCThreads/4) Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 28
  30. 30. Настройка GC. Xmx Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 29
  31. 31. Настройка GC. Xmx Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 30
  32. 32. Настройка GC. Xmx Чтобы избежать ConcurrentModeFailure, Promotion Failure •Достаточный запас свободного места в хипе •Минимизация Promotion Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 31
  33. 33. Настройка GC. Tenuring Threshold Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 32
  34. 34. Настройка GC. Xmx Выводы: Больший Xmx добавляет постоянный GC overhead Увеличение Xmx с целью сделать CMS более редким приводит на практике к большим паузам и gc overhead CMS не должен запускаться часто (1:100 к young gen) C другой стороны, Xmx должен быть достаточно велик для избежания Concurrent Mode Failure и OutOfMemoryError AutobahnFX policy: Баланс между CMSInitiatingOccupancyFraction, permanent heap liveset и Xmx CMSInitiatingOccupancyFraction = 60..70% Xmx CMSInitiatingOccupancyFraction ~ heap liveset + 30% (depends on promotion) Xmx - CMSInitiatingOccupancyFraction => 300mb Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 33
  35. 35. Настройка GC. Tenuring Threshold Методика Включить диагностику -XX:+PrintTenuringDistribution -XX:MaxTenuringThreshold=10 -XX:InitialTenuringThreshold=10 Смотреть логи: 2013-12-16T16:09:23.417+0000: 49.812: [GC 49.812: [ParNew Desired survivor size 28388608 bytes, new threshold 4 (max 10) - age 1: 10573048 bytes, 10573048 total - age 2: 5387112 bytes, 15960160 total - age 3: 5367112 bytes, 21327272 total Смотреть логи •Если после определенного уровня размеры поколений равны – threshold нужно уменьшить •Если размеры поколений уменьшаются линейно – необходимо подбирать далее Speaker name Deutsche Bank Identifier 12/20/2013 9:22:15 AM Name of event/date 2010 DB Blue template 34
  36. 36. Настройка GC. SurvivorRatio Методика SurvivorRatio=1(2) Если есть ограничения по памяти: Включить -XX:+PrintTenuringDistribution Если age 1 = SurvivorSpace, allocate more SurvivorSpace AutobahnFX policy Мусор не должен уходить в олдген из-за переполнения Survivor Space Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 35
  37. 37. Заключение Оптимальный подход к мониторингу: gc logs Минимально необходимый объем мониторинга: •Продолжительность пауз •gc Overhead Haстройка •Оптимальный collector – CMS •Настройка GC параметров должна происходит в prod-like окружении •Достижение определенных уровней производительности gc трудноосуществимо подбором параметров JVM •Настройка GC заключается в нахождении баланса между throughput, latency & stability Deutsche Bank Identifier 12/20/2013 9:22:15 AM Speaker name Name of event/date 2010 DB Blue template 36

×