Анализ файлов журнала сборщика мусора (GC) для мониторинга проблем с памятью
Рекомендуется включать ведение журнала GC в производственных средах. Дополнительные сведения о включении ведения журнала GC см. в разделе Мониторинг использования памяти сервера ThingWorx. После включения ведения журнала GC все операции GC на сервере будут регистрироваться. Если JVM не отвечает в течение длительных периодов времени, внешние инструменты, такие как VisualVM, вероятно, не смогут собирать данные памяти. Однако JVM может распечатать операции GC, и это может помочь в определении причины проблемы с памятью.
Чтение журналов GC
Для анализа журналов GC можно использовать такие инструменты, как GCEasy.io и Chewiebug GC Viewer. Можно также анализировать журналы GC на наличие распространенных проблем вручную в текстовом редакторе.
Обычно распечатывается каждая операция очистки памяти, как показано в следующем примере.
1. Время с момента запуска JVM
2. Тип GC
3. Причина для GC
4. После очистки размер потомков уменьшен с 549 МБ до 4 MБ
5. Общий размер потомков
6. Общее время выполнения GC
7. Выделенная куча
8. Общий объем памяти решения, которую очищает Java
Дополнительные сведения о операциях GC см. в документации Oracle.
Инструмент анализа GC преобразовывает текстовое представление данных очистки в более удобный для чтения график.
Анализ данных в журнале сборщика мусора помогает определить следующие сценарии, которые указывают на наличие проблем с памятью в решении ThingWorx.
Чрезвычайно длинные полные операции GC (более 45 с) - это крайне нежелательные операции с остановкой всех действий. Например, следующая полная операция GC занимает 46 секунд. На это время вся другая активность пользователя останавливается:
272646.952: [Full GC: 7683158K->4864182K(8482304K) 46.204661 secs]
Полные операции GC, выполняемые циклически - это полные операции GC, выполняемые в быстрой последовательности.
Например, для разрешения следующих четырех последовательных сборок мусора требуется около двух минут:
16121.092: [Full GC: 7341688K->4367406K(8482304K), 38.774491 secs]
16160.11: [Full GC: 4399944K->4350426K(8482304K), 24.273553 secs]
16184.461: [Full GC: 4350427K->4350426K(8482304K), 23.465647 secs]
16207.996: [Full GC: 4350431K->4350427K(8482304K), 21.933158 secs]
Красные треугольники на пиках следующего графика являются визуальными указателями на полные операции GC, выполняемые циклически:
Утечки памяти - происходят при хранении в памяти возрастающего числа объектов, когда память не может быть очищена.
В следующем примере память постоянно увеличивается, несмотря на работу сборщиков мусора:
Рекомендация. В отсутствие автоматического инструмента для мониторинга и записи использования памяти во времени ежедневно проверяйте журналы GC на наличие проблем с памятью. При возникновении проблем с памятью собирайте дампы потоков или кучи JVM для выявления длительно выполняемых операций. Такие операции могут инициировать основные проблемы с памятью в решении ThingWorx.
Было ли это полезно?