Java GC tuning and monitoring (by Alexander Ashitkin)

7,874
-1

Published on

Slide deck from meetup 17 Dec 2013 at Moscow

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,874
On Slideshare
0
From Embeds
0
Number of Embeds
19
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

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

×