Руководство по Java Profilers

Руководство по Java Profilers

1. обзор

Sometimes writing code that just runs is not enough. Мы могли бы захотеть узнать, что происходит внутри, например, как распределяется память, последствия использования одного подхода к кодированию над другим, последствия одновременного выполнения, области для повышения производительности и т. д. Мы можем использовать профилировщики для этого.

Профилировщик Java - это инструмент, которыйmonitors Java bytecode constructs and operations at the JVM level. Эти конструкции и операции кода включают в себя создание объектов, итеративные выполнения (включая рекурсивные вызовы), выполнение методов, выполнение потоков и сборку мусора.

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

2. JProfiler

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

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

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

Как и большинство профилировщиков, мы можем использовать этот инструмент как для локальных, так и для удаленных приложений. Это означает, что возможноprofile Java applications running on remote machines without having to install anything on them.

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

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

Если мы хотим узнать оcall tree of interactions with our database и увидетьconnections that may be leaked, JProfiler отлично справится с этим.

Живая память - это одна из функций JProfiler, которая позволяет намsee current memory usage by our application. Мы можем просматривать использование памяти для объявлений и экземпляров объектов или для полного дерева вызовов.

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

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

JProfiler поддерживаетintegration with popular IDEs, такие как Eclipse, NetBeans и IntelliJ. Возможно дажеnavigate from snapshot to source code!

3. YourKit

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

Как и JProfiler, YourKit имеет основные функции для визуализации потоков, сборок мусора, использования памяти и утечек памяти сsupport for local and remote profiling via ssh tunneling.

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

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

YourKit имеет интересныеCPU profiling feature that allows focused profiling on certain areas of our code, такие как методы или поддеревья в потоках. Это очень мощный инструмент, так как он позволяет выполнять условное профилирование с помощью функции «что, если».

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

Мы также можемprofile SQL, and NoSQL database calls с YourKit. Он даже предоставляет представление для реальных запросов, которые были выполнены.

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

4. Java VisualVM

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

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

Одним из интересных преимуществ Java VisualVM является то, что мы можемextend it to develop new functionalities as plugins. Затем мы можем добавить эти плагины во встроенный центр обновлений Java VisualVM.

Java VisualVM поддерживаетlocal and remote profiling, а также профилирование памяти и процессора. Connecting to remote applications requires providing credentials (имя хоста / IP и пароль, если необходимо)but does not provide support for ssh tunneling. Мы также можем выбрать включениеreal-time profiling with instant updates (обычно каждые 2 секунды).

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

 

С помощью функции моментальных снимков Java VisualVM мы можемtake snapshots of profiling sessions for later analysis.

5. NetBeans Profiler

Профилировщик NetBeans -bundled with Oracle’s open source NetBeans IDE.

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

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

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

Профилировщик Netbeans также являетсяgood choice for lightweight development and profiling. NetBeans Profiler предоставляет единое окно для настройки и управления сеансом профилирования и отображения результатов. Это дает уникальную возможность знатьhow often garbage collection occurs.

6. Другие Solid Profilers

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

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

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

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