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. Мониторинг 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. Мониторинг 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. Мониторинг 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. Мониторинг 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. Мониторинг 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. Мониторинг GC. Снимок 1 дня
Deutsche Bank
Identifier
12/20/2013 9:22:14 AM
Speaker name
Name of event/date
2010 DB Blue template
8
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. Мониторинг 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. Мониторинг GC. Имплементация. RRD
Deutsche Bank
Identifier
12/20/2013 9:22:14 AM
Speaker name
Name of event/date
2010 DB Blue template
11
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. Мониторинг GC. Имплементация. Geneos
Deutsche Bank
Identifier
12/20/2013 9:22:15 AM
Speaker name
Name of event/date
2010 DB Blue template
13
15. Мониторинг GC. Имплементация. Geneos
Deutsche Bank
Identifier
12/20/2013 9:22:15 AM
Speaker name
Name of event/date
2010 DB Blue template
14
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. Настройка GC. CMS
Deutsche Bank
Identifier
12/20/2013 9:22:15 AM
Speaker name
Name of event/date
2010 DB Blue template
17
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. Настройка 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. Настройка 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. Настройка 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. Настройка 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. Настройка 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. Настройка 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. Настройка 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. Настройка 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
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. Настройка GC. Xmx
Deutsche Bank
Identifier
12/20/2013 9:22:15 AM
Speaker name
Name of event/date
2010 DB Blue template
29
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. Настройка 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. Настройка 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. Настройка 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. Настройка 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. Настройка 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. Заключение
Оптимальный подход к мониторингу:
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