Перейти к основному содержимому

Руководство по профайлерам Java

· 6 мин. чтения

1. Обзор

Иногда написания кода, который просто работает, недостаточно. Мы можем захотеть узнать, что происходит внутри, например, как распределяется память, последствия использования одного подхода к кодированию вместо другого, последствия параллельных исполнений, области повышения производительности и т. д. Для этого мы можем использовать профилировщики.

Java Profiler — это инструмент, который отслеживает конструкции и операции байт-кода Java на уровне JVM . Эти конструкции кода и операции включают создание объекта, итеративное выполнение (включая рекурсивные вызовы), выполнение методов, выполнение потоков и сборку мусора.

В этой статье мы обсудим основные профилировщики Java: JProfiler , YourKit , Java VisualVM и профайлер Netbeans .

2. JProfiler

JProfiler — лучший выбор для многих разработчиков. Благодаря интуитивно понятному пользовательскому интерфейсу JProfiler предоставляет интерфейсы для просмотра производительности системы, использования памяти, потенциальных утечек памяти и профилирования потоков.

С помощью этой информации мы можем легко узнать, что нам нужно оптимизировать, исключить или изменить в базовой системе.

Вот как выглядит интерфейс JProfiler:

./c2c880c58e83166ac7dc13832529216e.png

Обзорный интерфейс JProfiler с функциями

Как и большинство профилировщиков, мы можем использовать этот инструмент как для локальных, так и для удаленных приложений. Это означает, что можно профилировать приложения Java, работающие на удаленных машинах, без необходимости устанавливать на них что-либо .

JProfiler также обеспечивает расширенное профилирование как для баз данных SQL, так и для баз данных NoSQL . Он предоставляет специальную поддержку для профилирования баз данных JDBC, JPA/Hibernate, MongoDB, Casandra и HBase.

На приведенном ниже снимке экрана показан интерфейс зондирования JDBC со списком текущих подключений:

./4caa73239032feb6a1ac4dcb747574cb.png

Просмотр базы данных JProfiler

Если мы заинтересованы в изучении дерева вызовов взаимодействий с нашей базой данных и видим соединения, которые могут быть упущены, JProfiler отлично с этим справится.

Live Memory — это одна из функций JProfiler, которая позволяет нам видеть текущее использование памяти нашим приложением . Мы можем просмотреть использование памяти для объявлений и экземпляров объектов или для полного дерева вызовов.

В случае дерева вызовов распределения мы можем выбрать просмотр дерева вызовов живых объектов, объектов со сборкой мусора или того и другого. Мы также можем решить, должно ли это дерево размещения быть для определенного класса или пакета или для всех классов.

На приведенном ниже экране показано использование оперативной памяти всеми объектами с указанием количества экземпляров:

./73dfc5ba09707a8f9bc41d1a60f197b8.png

Просмотр оперативной памяти JProfiler

JProfiler поддерживает интеграцию с популярными IDE , такими как Eclipse, NetBeans и IntelliJ. Можно даже перейти от моментального снимка к исходному коду !

3. Ваш комплект

YourKit Java Profiler работает на многих различных платформах и обеспечивает отдельные установки для каждой поддерживаемой операционной системы (Windows, MacOS, Linux, Solaris, FreeBSD и т. д.).

Как и JProfiler, YourKit имеет основные функции для визуализации потоков, сборки мусора, использования памяти и утечек памяти с поддержкой локального и удаленного профилирования через ssh-туннелирование .

Вот краткий обзор результатов профилирования памяти серверного приложения Tomcat:

./2cebfe2ccc42c94a953d179cf9955c96.png

YourKit Java Profiler профилирование памяти серверного приложения Tomcat

YourKit также пригодится в тех случаях, когда мы хотим профилировать возникающие исключения . Мы можем легко узнать, какие типы исключений были выброшены и сколько раз возникало каждое исключение.

YourKit имеет интересную функцию профилирования ЦП, которая позволяет сфокусировать профилирование на определенных областях нашего кода , таких как методы или поддеревья в потоках. Это очень мощное средство, поскольку оно позволяет выполнять условное профилирование с помощью функции «что, если».

На рис. 5 показан пример интерфейса профилирования потоков:

./ffff4616375a53def0040676dd8ce1fa.png

Рисунок 5. Интерфейс профилирования потоков YourKit Java Profiler

Мы также можем профилировать SQL и вызовы базы данных NoSQL с помощью YourKit. Он даже предоставляет представление для фактических запросов, которые были выполнены.

Хотя это не является техническим соображением, разрешающая модель лицензирования YourKit делает его хорошим выбором для многопользовательских или распределенных команд, а также для покупки одной лицензии.

4. Визуальная виртуальная машина Java

Java VisualVM — это упрощенный, но надежный инструмент профилирования для приложений Java. По умолчанию этот инструмент входит в комплект Java Development Kit (JDK). Его работа зависит от других автономных инструментов, предоставляемых в JDK, таких как JConsole , jstat , jstack , jinfo и jmap .

Ниже мы видим простой обзорный интерфейс текущего сеанса профилирования с использованием Java VisualVM:

./c249a074ec5a6b1a207a7a88350f9929.png

Профилирование приложения Java VisualVM локального сервера Tomcat

Одним интересным преимуществом Java VisualVM является то, что мы можем расширять его для разработки новых функций в виде подключаемых модулей . Затем мы можем добавить эти плагины во встроенный центр обновлений Java VisualVM.

Java VisualVM поддерживает локальное и удаленное профилирование , а также профилирование памяти и ЦП. Для подключения к удаленным приложениям требуется предоставление учетных данных (имя хоста/IP-адрес и пароль при необходимости) , но не предоставляется поддержка ssh-туннелирования . Мы также можем включить профилирование в реальном времени с мгновенными обновлениями (обычно каждые 2 секунды).

Ниже мы можем увидеть внешний вид памяти приложения Java, профилированного с помощью Java VisualVM:

./1485593bea1cc6c3746fe14ed9e4914f.png

Гистограмма кучи памяти Java VisualVM

Благодаря функции моментальных снимков Java VisualVM мы можем делать моментальные снимки сеансов профилирования для последующего анализа .

5. Профилировщик NetBeans

NetBeans Profiler входит в состав среды IDE Oracle NetBeans с открытым исходным кодом .

Хотя этот профилировщик во многом похож на Java VisualVM , это хороший выбор, когда мы хотим, чтобы все было упаковано в одну программу (IDE + Profiler).

Все другие профилировщики, рассмотренные выше, предоставляют плагины для улучшения интеграции с IDE.

На снимке экрана ниже показан пример интерфейса NetBeans Profiler:

./d930443a45dd7d26f8be7d69a846d4d2.png

Интерфейс телеметрии Netbeans Profiler

Netbeans Profiler также является хорошим выбором для упрощенной разработки и профилирования . NetBeans Profiler предоставляет единое окно для настройки и управления сеансом профилирования и отображения результатов. Это дает уникальную возможность узнать , как часто происходит сборка мусора .

6. Другие профилировщики твердых тел

Некоторые почетные упоминания здесь — это Java Mission Control , New Relic и Prefix (от Stackify ) — они имеют меньшую долю рынка в целом, но, безусловно, заслуживают упоминания. Например, Stackify Prefix — отличный легкий инструмент профилирования, хорошо подходящий для профилирования не только Java-приложений, но и других веб-приложений.

7. Заключение

В этой статье мы обсудили профилирование и профилировщики Java. Мы рассмотрели особенности каждого профилировщика и то, что влияет на потенциальный выбор одного из них.

Доступно множество профилировщиков Java, некоторые из которых обладают уникальными характеристиками. Как мы видели в этой статье, выбор используемого профилировщика Java в основном зависит от выбора инструментов разработчиком, требуемого уровня анализа и возможностей профилировщика.