Вопрос или проблема
Для веб-приложений на Java: Если разработчик хочет мгновенно получать обратную связь по производительности во время локальной разработки, не могли бы вы порекомендовать какие-нибудь бесплатные APM (мониторинг производительности приложений)/профайлеры, которые можно использовать для этой цели? Идеально, если обратная связь по производительности, генерируемая такими инструментами, будет похожа на ту, что создается Xrebel, который показывает весь стек вызовов запроса от HTTP-вызова до SQL-запросов.
Jvisualvm и Java Mission Control идут в комплекте с JDK и могут быть найдены в $JAVA_HOME/bin. Эта веб-страница Oracle содержит хорошую обзорную информацию. Также посмотрите этот ответ.
Два ранее коммерческих инструмента Oracle для профилирования и мониторинга были открыты и доступны бесплатно в проекте OpenJDK:
Эти инструменты могут быть доступны от выбранного вами поставщика JDK/JRE: Azul Systems, BellSoft, Amazon, SAP, Oracle, IBM, Red Hat, Adoptium от Eclipse Foundation и других.
Ответ или решение
Для разработки Java-приложений, когда необходимо мгновенно получать данные о производительности во время локальной разработки, существует несколько бесплатных инструментов мониторинга производительности и профилирования (APM), которые могут быть полезны. В данном ответе мы рассмотрим несколько из них, а также их возможности, схожие с инструментами, такими как Xrebel, который предоставляет детальные сведения о запросах – от HTTP-вызовов до выполняемых SQL-запросов.
1. JVisualVM
JVisualVM – это мощный инструмент, который входит в стандартный набор JDK и доступен в каталоге $JAVA_HOME/bin
. Он предоставляет различные функции мониторинга и профилирования, включая:
- Мониторинг использования памяти и загрузки процессора.
- Анализ стек-трейсов, что позволяет отслеживать выполнение методов и наглядно видеть, где возникают «узкие места».
- Возможность создания дампов памяти для более глубокого анализа при возникновении проблем.
Документация и информация о JVisualVM доступны здесь.
2. Java Mission Control (JMC)
Java Mission Control – еще один инструмент, входящий в JDK, который предоставляет мощные функции для анализа производительности. JMC включает:
- JDK Flight Recorder (JFR) — инструмент для записи событий производительности, который может быть использован для детальной диагностики и анализа поведения приложения.
- Простоту в использовании с возможностью визуализации данных, что позволяет разработчикам быстрее идентифицировать и устранять проблемы.
Обзор возможностей JMC можно найти на данной странице.
3. JDK Flight Recorder
JDK Flight Recorder – это инструмент для профилирования и сбора метрик приложения. Он предоставляет разработчикам возможность:
- Собирать данные о работе приложения в форме событий без значительного влияния на производительность.
- Анализировать производительность в режиме реального времени с помощью JMC.
- Имеет возможность интеграции с Java Mission Control для дальнейшего анализа данных.
Подробности о JDK Flight Recorder доступны здесь.
4. Eclipse Memory Analyzer (MAT)
Еще одним полезным инструментом для анализа производительности приложения является Eclipse Memory Analyzer. MAT позволяет:
- Анализировать дампы памяти и выявлять утечки памяти.
- Просматривать объекты в памяти и их взаимосвязи, что значительно упрощает поиск проблем.
Хотя этот инструмент больше ориентирован на анализ памяти, он может помочь в оптимизации работы приложений.
5. YourKit Java Profiler
Хотя YourKit не является полностью бесплатным инструментом, он предлагает бесплатную пробную версию, которая может быть полезна для краткосрочного анализа. Инструмент предоставляет:
- Глубокий анализ производительности и задержек.
- Графический интерфейс для визуализации данных.
- Оптимизацию использования потоков и ресурсов.
Заключение
Для локальной разработки Java-приложений можно использовать целый ряд бесплатных инструментов для мониторинга производительности и профилирования. Инструменты, такие как JVisualVM и Java Mission Control, предоставляют широкие возможности по сбору данных и их последующему анализу, позволяя разработчикам быстро находить и устранять проблемы. Важно регулярно использовать эти инструменты для оптимизации и улучшения производительности приложений, что в конечном итоге ведет к созданию более эффективных и производительных программных решений.