Использование VisualVM для мониторинга проблем с памятью
Подключив VisualVM к решению ThingWorx, можно в режиме реального времени получать данные об использовании памяти, ЦП и потоков в решении. VisualVM используется для выявления распространенных проблем с памятью и дальнейшего исследования для определения основной причины такого поведения.
Если решение ThingWorx находится в хорошем состоянии, VisualVM показывает стабильное использование памяти и ЦП на протяжении времени. На графике используемой памяти отображаются регулярные серии пиков. Это обусловлено тем, что JVM использует доступную память перед выполнением очистки. На операции GC отводится незначительная часть общего использования ЦП (менее 5 %).
Когда системе требуется больше ресурсов, уровни использования памяти остаются повышенными в течение длительных периодов времени. Отмечается постоянная или, временами, чрезвычайно высокая активность GC, выраженная в проценте общего использования ЦП.
Графические признаки расходования памяти подобны показателям памяти в других инструментах, таких как журнал GC. При использовании VisualVM нельзя получить конкретные показатели уровня JVM. Доступно только визуальное отображение проблемы. Чтобы определить основную причину проблемы, необходимо ее тщательно проанализировать.
При обнаружении проблем с памятью в VisualVM нужно измерить, какие потоки используют больше всего памяти. Для проверки используйте опцию Sample > Memory > Per thread allocations.
* 
Данные выборки в производственной среде оказывают дополнительное влияние на производительность и могут привести к тому, что медленное решение полностью перестанет отвечать. В производственных средах используйте сборщик выборки в качестве последнего варианта получения диагностических данных.
Если включить компонент сборщика выборки в VisualVM, можно проверить, какие потоки в решении ThingWorx используют больше всего памяти. Чтобы увидеть, для чего служат эти потоки, остановите сборщик выборки, соберите дамп потоков с вкладки Threads и найдите результат по наименованиям верхних потоков. Например, потоки OOM_QueryStream на предыдущем изображении выполняют обзор QueryStreamEntriesWithData, что, как известно, может вызывать проблемы с памятью в решениях ThingWorx (в зависимости от порядка вызова этого сервиса).
При наличии проблемы можно собрать снимки решения. Снимок содержит все графики и дампы потоков. Эти данные могут быть переданы службе поддержки PTC для дополнительного анализа проблемы. Сбор снимков не влияет на производительность решения.
VisualVM также позволяет выполнять операции GC вручную и собирать дампы кучи. Такие операции не следует выполнять без соответствующих рекомендаций службы поддержки PTC.
Рекомендация. При обнаружении периодов со сниженной производительностью рекомендуется проверить графики памяти в VisualVM и собрать выборку памяти для выявления периодов повышенного использования.
Было ли это полезно?