|
|
|||||||||||||||||||||||||||||
|
Мониторинг и диагностика производительности в Java SE 6 (исходники)Источник: IBM developerWorks Россия Кэти Кегли, Грэг Робертс
В версии Java SE 6 особое внимание уделяется производительности. Она содержит расширенный набор инструментов для мониторинга и управления приложения и решения стандартных проблем. Среди усовершенствований платформы:
В статье разбираются основы функциональности для мониторинга и управления, предусмотренной в платформе Java SE, и подробно рассказывается о диагностике производительности и усовершенствованиях в управлении платформой, реализованных в последней версии. В ней также рассматриваются инструменты для диагностики и разрешения проблем, входящие в состав платформы Java SE 6. Чтобы извлечь максимальную пользу из этой статьи, необходимо обладать хорошим знанием функциональности для мониторинга и управления предыдущих версий Java SE. API для мониторинга и управленияВ пакете Таблица 1. Платформенные MBean-компоненты
Любое приложение может извлечь и использовать платформенные MBean-компоненты, предоставляемые JVM, получив доступ к экземпляру требуемого компонента и вызывая его соответствующие методы. MXBean-компоненты можно использовать для мониторинга функционирования локальной и удаленной виртуальной машины и получения информации о ней. Платформенные MBean-компоненты обеспечивают доступ к такой информации, как количество загруженных классов, время работы виртуальной машины, количество использованной памяти и число запущенных потоков, а также статистика о конкуренции между потоками. Осуществлять мониторинг и управлять ресурсами виртуальной машины можно двумя способами:
Прямой доступ к интерфейсу MXBeanМожно получить доступ к объекту Листинг 1. Прямой доступ к MXBean
Непрямой доступ с использованием интерфейса MBeanServerИнтерфейс платформенного Листинг 2. Непрямой доступ к MXBean
Усовершенствования в API, добавленные в Java SE 6В Java SE 5 был представлен пакет В Java SE 6 в пакет В Java SE 6 введены два новых класса:
Класс
В версии Java SE 5 метод Четыре новых метода были добавлены в интерфейс
Также интерфейс В дополнение к программной поддержке в Java SE 6 также включено несколько инструментов для диагностики и решения проблем, которые можно использовать для поиска проблем и мониторинга использования ресурсов в JVM. В следующих двух разделах объясняются и демонстрируются некоторые из имеющихся диагностических инструментов. Java-консоль для мониторинга и управления приложениями (JConsole)В Java SE 6 включена официальная поддержка инструмента JConsole - консоли для мониторинга и управления, впервые представленной в Java SE 5. JConsole позволяет отслеживать статистику по различным ресурсам виртуальной машины во время работы. Она особенно полезна для поиска симптомов взаимных блокировок, конфликта блокировок, утечек памяти и зациклившихся потоков. Эта консоль может быть подключена к локальной или удаленной виртуальной машине и может использоваться для отслеживания:
В следующих подразделах обсуждаются усовершенствования, внесенные в инструмент JConsole в Java SE 6. Поддержка API AttachНачиная с версии Java SE 6 в JConsole реализована поддержка нового API-интерфейса Attach. Этот API состоит из двух пакетов: В прошлом приложения, для которых нужно было обеспечить мониторинг с помощью JConsole, необходимо было запускать со специальным флагом -Dcom.sun.management.jmxremote, но теперь этого не требуется. Поддержка динамического подсоединения позволяет JConsole выполнять мониторинг любого приложения, поддерживающего Attach API. Совместимые приложения определяются автоматически при запуске инструмента JConsole. Усовершенствования в пользовательском интерфейсе и отображении MBean-компонентовВ версии Java SE 6 инструмент JConsole получил обновленный пользовательский интерфейс, сходный с ОС Windows® или рабочим столом GNOME, в зависимости от того, на какой платформе он работает. Снимки экрана, представленные дальше в этой статье, были сделаны на Windows XP и показывают возможности пользовательского интерфейса, измененные с предыдущей версии. После запуска и связывания с приложением окно JConsole содержит шесть вкладок, каждая из которых представляет свой тип ресурсов JVM или набор ресурсов:
Вкладка Overview содержит сводку информацию об использовании памяти, потоках, классах и ЦП в графическом формате. На этой вкладке одновременно отображается сводная информация, ранее расположенная на нескольких вкладках. На рисунке 1 показана вкладка Overview для примера приложения: Рисунок 1. Вкладка Overview в окне JConsole На вкладке Overview приведены четыре графика с информацией об использовании ресурсов виртуальной машины с возможностью выбора временного периода, для которого необходимо посмотреть результаты. Первый график Heap Memory Usage (использование памяти в куче) изображает зависимость количества памяти, выделяемой из кучи, в мегабайтах от времени. Этот график очень полезен при поиске утечек памяти. Если в приложении есть утечка памяти, то количество памяти, выделяемой из кучи, со временем будет постоянно расти. На графике Threads (потоки) построена зависимость количества живых потоков от времени, на графике Classes (классы) показано количество загруженных классов. На графике CPU Usage (использование ЦП) приведено, сколько процентов ресурсов ЦП использовалось приложением на разных этапах его жизненного цикла. Вкладка VM Summary (сводка по виртуальной машине), показанная на рисунке 2, - еще одно нововведение версии Java SE 6. На ней представлена подробная информация о виртуальной машине, включая общее время работы, информацию о потоках, загруженных классах, статистику использования памяти и сборки мусора, а также информацию об операционной системе. Рисунок 2. Вкладка VM Summary в окне JConsole Усовершенствованная вкладка MBeans (MBean-компоненты) облегчила доступ к атрибутам и методам MBean-компонентов. На ней приведена информация обо всех MBean-компонентах, зарегистрированных на платформе. Все платформенные MBean-компоненты доступны через эту вкладку. На дереве в левой части вкладки изображены все работающие на данный момент MBean-компоненты. При выборе MBean-компонента в таблице справа показывается объект MBeanInfo и дескриптор для него (см. рисунок 3): Рисунок 3. Вкладка MBean в окне JConsole Выбрав пункт Attributes (атрибуты), можно просмотреть все атрибуты MBean-компонента, как показано на рисунке 4 для MBean-компонента Threading (отвечающего за потоки): Рисунок 4. Свойства MBean-компонента Заметим, что атрибуты и их значения, показанные справа, соответствуют значениям атрибутов, доступным через Рисунок 5. Развернутое значение атрибута Изменяемые атрибуты выделены синим цветом. Их значения можно изменить, если щелкнуть по атрибуту мышкой и ввести новое значение. Например, атрибут Выбрав пункт Operations (методы), можно посмотреть список методов, связанных с этим MBean-компонентом. Методы MBean-компонента отображаются справа как кнопки, и нажатие на кнопку приводит к вызову соответствующего метода. На рисунке 6 показаны методы, доступные для Рисунок 6. Методы MBean-компонента MBean-компонент HotSpot DiagnosticВ версии SE 6 в JConsole была добавлена поддержка MBean-компонента HotSpot Diagnostic. Этот MBean-компонент был добавлен в последней версии для выполнения различных диагностических действий "на лету". Его API позволяет выполнять дамп кучи и устанавливать другие параметры VM непосредственно во время работы. Доступ к MBean-компоненту HotSpot Diagnostic можно получить на вкладке MBean, развернув пункт Рисунок 7. MBean-компонент HotSpot Diagnostic Поддержка плагинов в JConsoleНачиная с версии Java SE 6 инструмент JConsole включает в себя поддержку плагинов, которая позволяет создавать собственные плагины для JConsole. Например, можно добавить специальную вкладку в главное окно JConsole для доступа к собственным MBean-компонентам, определенным в приложении, и проведения нестандартных операций мониторинга. Для создания собственного плагина для JConsole необходимо создать класс, наследующий абстрактному классу
Инструмент JConsole использует для поиска и загрузки классов плагинов собственную функциональность провайдера служб (service-provider mechanism). Поэтому плагин должен быть предоставлен в JAR-файле, содержащем файл META-INF/services/com.sun.tools.jconsole.JConsolePlugin. Этот файл должен содержать список с полными именами классов плагина, при этом на одной строке должно находиться имя одного класса. Для загрузки новых плагинов в окно JConsole эту утилиту нужно запустить из командной строки, используя следующую инструкцию:
В этой инструкции параметр plugin_path ссылается на путь к каталогу или архиву, содержащему плагин для JConsole. Можно указать сразу несколько путей. В Java SE 6 уже присутствует плагин JTop - пример плагина для JConsole. Этот плагин показывает использование ЦП потоками, запущенными в текущем приложении. Для запуска утилиты JConsole вместе с плагином JTop можно использовать команду:
На рисунке 8 приведен экземпляр JConsole с выбранной вкладкой JTop. В левой колонке отображаются названия всех запущенных потоков. Для каждого потока показано использование ЦП и состояние этого потока. Это представление автоматически обновляется при изменении статистики. Плагин JTop может оказаться полезным при поиске потоков, сильно нагружающих ресурсы ЦП. Рисунок 8. Плагин JTop для JConsole Инструменты для мониторинга и решения проблемКроме утилиты JConsole, Java SE 6 включает поддержку нескольких других утилит для командной строки. Эти диагностические утилиты могут подключаться к любому приложению, при этом приложение не требуется запускать в специальном режиме. Это позволяет получать дополнительную информацию о приложении, чтобы определить, соответствует ли его поведение ожидаемому. Заметим, что инструменты представлены как экспериментальные и необязательно будут полностью поддерживаться в будущих версиях Java SE. Инструменты для мониторингаВ Java SE 6 входят три утилиты командной строки, перечисленные в таблице 2, которые могут оказаться полезными для отслеживания статистики по производительности виртуальной машины: Таблица 2. Инструменты для мониторинга
Утилита В следующем примере показано, как использовать утилиту Листинг 3. Использование утилиты jps
Утилита Демон Инструменты для решения проблемВ версии Java SE 6 также присутствует ряд инструментов для решения проблем. Эти инструменты, перечисленные в таблице 3, позволяют локализовать участки приложения, которые работают не так, как планировалось: Таблица 3. Инструменты для решения проблем
Утилита командной строки Инструмент Утилита командной строки Демон-агент, обеспечивающий отладку (serviceability agent debug daemon - Утилита командной строки ЗаключениеВ платформе Java 6 реализован ряд усовершенствований в средствах контроля виртуальной машины, API для управления и инструменты JDK, помогающие найти и диагностировать проблемы с производительностью и памятью в Java-приложениях. В этой статье описываются усовершенствования инфраструктуры Java SE для мониторинга и управления приложениями, и рассматриваются диагностические инструменты для командной строки, доступные программистам. Средняя скорость работы Java-приложений со временем стабильно растет. Теперь, с выходом Java SE 6, производительность Java стала сравнима с производительностью C или C++. Во многих случаях Java-код работает значительно быстрее. Инструменты, описанные в этой статье, можно использовать, чтобы еще больше оптимизировать производительность. Попробуйте воспользоваться ими, и мы гарантируем, что вы найдете возможности для оптимизации своих приложений, о которых раньше и не подозревали.
|
|