Графический интерфейс пользователя JConsole является контрольным инструментом, который подчиняется к Расширениям управления Java (JMX) спецификация. JConsole использует обширный инструментарий виртуальной машины Java (Java VM), чтобы предоставить информацию о производительности и потреблении ресурсов приложений, работающих на платформе Java.
В Платформе Java, Standard Edition (Java платформа SE) 6, JConsole был обновлен, чтобы представить стиль Windows, и рабочие столы GNOME (другие платформы представят стандартный Java графический стиль). Снимки экрана, представленные в этом документе, были взяты от экземпляра интерфейса, работающего на Windows XP.
Запуск JConsole
Исполнимая программа jconsole может быть найдена в JDK_HOME/bin, где JDK_HOME является каталогом, в котором устанавливается Комплект разработчика для Java (JDK). Если этот каталог находится в Вашем системном пути, можно запустить JConsole, просто вводя jconsole в команде (оболочка) подсказка. Иначе, необходимо ввести полный путь к исполняемому файлу.
Синтаксис команды
Можно использовать JConsole, чтобы контролировать оба местных применения, а именно, те, которые работают на той же самой системе как JConsole, так же как удаленные приложения, а именно, те, которые работают на других системах.
Отметьте - Используя JConsole, чтобы контролировать, местное применение полезно для разработки и для создания прототипов, но не рекомендуется для продуктивных сред, потому что сам JConsole использует существенные системные ресурсы. Дистанционному мониторингу рекомендуют изолировать приложение JConsole от контролируемой платформы.
Вы запускаете JConsole, вводя следующую команду в командной строке.
% jconsole
Когда JConsole запустится, Вам дадут выбор всех приложений Java, которые работают локально, что JConsole может соединиться с.
Если Вы хотите контролировать определенное приложение, и Вы знаете, что ID процесса приложения, то можно также запустить JConsole так, чтобы это соединилось с тем приложением. Это приложение должно работать с тем же самым идентификатором пользователя как JConsole. Синтаксис команды, чтобы запустить JConsole для локального контроля определенного приложения является следующим.
% jconsole processID
В команде выше processID ID процесса приложения (PID). Можно определить PID приложения следующими способами:
На UNIX или системах Linux, можно использовать команду ps, чтобы найти PID экземпляра java, который работает.
На системах Windows можно использовать Диспетчер задач, чтобы найти PID java или javaw.
Например, если бы Вы решили, что ID процесса приложения Notepad 2956, то тогда Вы запустили бы JConsole со следующей команды.
% jconsole 2956
И JConsole и приложение должны выполняемым тем же самым пользователем. Система управления и система контроля используют полномочия файла операционной системы. Если Вы не определите ID процесса, то JConsole автоматически обнаружит все локальные приложения Java, и выведет на экран диалоговое окно, которое позволяет Вам выбирать, какой Вы хотите контролировать (см. Соединение с Агентом JMX).
Чтобы запустить JConsole для дистанционного мониторинга, Вы используете следующий синтаксис команды.
% jconsole hostName:portNum
В команде выше, hostName является именем системы, запускающей приложение, и portNum является номером порта, который Вы определили, когда Вы включали агенту JMX, когда Вы запустили Java VM. Для получения дополнительной информации см. Дистанционный мониторинг и управление.
Если Вы не определите имя хоста / комбинация номера порта, то JConsole выведет на экран диалоговое окно соединения (Соединяющийся с Агентом JMX), чтобы позволить Вам ввести имя хоста и номер порта.
Если Вы запустите JConsole с параметров, определяющих агент JMX, чтобы соединиться с, то он автоматически начнет контролировать указанный Java VM. Можно соединиться с различным узлом в любое время, выбирая Соединение | Новое Соединение и вводя необходимую информацию.
Иначе, если Вы не обеспечиваете параметров, когда Вы запускаете JConsole, первой вещью, которую Вы видите, является диалоговое окно соединения. У этого диалогового окна есть две опции, позволяя соединения или с Локальными или с Удаленными процессами.
Динамическое Присоединение
При предыдущих выпусках Java платформа SE приложения, которые Вы хотели контролировать с JConsole, должны были быть запущены со следующей опции.
% -Dcom.sun.management.jmxremote
Однако, версия JConsole, предоставленного Java SE, который 6 платформ могут присоединить к любому приложению, которое поддерживает API Присоединения. Другими словами любое приложение, которое запускается в Java SE 6 HotSpot VM, обнаруживается автоматически JConsole, и не должно быть запущено, используя вышеупомянутый параметр командной строки.
Соединение JConsole к Локальному Процессу
Если Вы запустите JConsole, не обеспечивая определенный агент JMX, чтобы соединиться с, то Вы будете видеть следующее диалоговое окно.
Рисунок 3-1, Создающий Соединение с Локальным Процессом
Локальные списки опций Процесса любой Java работа VMs локальной системы, которые были запущены с того же самого идентификатора пользователя как JConsole, наряду с их ID процесса и их классом и/или информацией о параметре. Чтобы соединить JConsole с Вашим приложением, выберите приложение, которое Вы хотите контролировать, затем нажать кнопку Connect. Список локальных процессов включает приложения, работающие в следующие типы Java VM.
Приложения с включенным агентом управления. Они включают приложения на Java SE 6 платформ или на J2SE 5.0 платформ, которые были запущены с опции -Dcom.sun.management.jmxremote или с определенной опции -Dcom.sun.management.jmxremote.port. Кроме того, список также включает любые приложения, которые были запущены на Java SE 6 платформ без любых свойств управления, но которые позже присоединены JConsole, который включает агенту управления во время выполнения.
Приложения, которые являются присоединяемыми с отключенным агентом управления.Присоединяемое приложение поддерживает загрузку агента управления во время выполнения. Присоединяемые приложения включают приложения, которые запускаются на Java SE 6 платформ, которые поддерживают API Присоединения. Приложения, которые поддерживают динамическое присоединение, не требуют, чтобы агент управления был запущен, определяя опции com.sun.management.jmxremote ИЛИ com.sun.management.jmxremote.port в командной строке, и JConsole не должен соединиться с агентом управления прежде, чем приложение будет запущено. Если Вы выберете это приложение, то Вам сообщат в примечании на экране, что агент управления будет включен, когда соединение будет сделано. В диалоговом окне соединения в качестве примера, показанном в рисунке 3-1, IDE NetBeans и сам JConsole были оба запущены в пределах Java SE 6 платформ VM. Оба появляются в нормальном тексте, подразумевая, что JConsole может соединиться с ними. В рисунке 3-1 выбирается JConsole, и примечание видимо.
Приложения, которые не являются присоединяемыми с отключенным агентом управления. Они включают приложения, запущенные на J2SE 1.4.2 платформы, или запустили на J2SE 5.0 платформ без опций -Dcom.sun.management.jmxremote ИЛИ com.sun.management.jmxremote.port. Эти приложения появляются grayed в таблице, и JConsole не может соединиться с ними. В диалоговом окне соединения в качестве примера, показанном в рисунке 3-1, приложение Anagrams было запущено с J2SE 5.0 платформ VM без любого из свойств управления, чтобы включить агенту JMX, и следовательно обнаруживается в сером и не может быть выбрано.
Рисунок 3-2, Пытающийся Соединяться с Приложением без Включенного Агента управления
В диалоговом окне соединения в качестве примера, показанном в рисунке 3-2, можно видеть, что приложение Anagrams было выбрано, щелкая по этому, но кнопка Connect остается grayed, и примечание казалось сообщающим Вам, что агент управления не включается для этого процесса. JConsole не может соединиться с Anagrams, потому что это не было запущено с корректного Java VM или с корректных опций.
Соединение JConsole к Удаленному Процессу
Когда диалоговое окно соединения открывается, Вам также дают опцию соединения с удаленным процессом.
Рисунок 3-3, Создающий Соединение с Удаленным Процессом
Чтобы контролировать процесс, работающий на удаленном Java VM, следует предоставить следующую информацию.
Имя хоста: имя машины, на которой Java работает VM.
Номер порта: номер порта агента JMX, который Вы определили, когда Вы запустили Java VM.
Имя пользователя и пароль: имя пользователя и пароль, чтобы использовать (потребовал, только если контроль Java VM через агент JMX, который требует аутентификации по паролю).
Чтобы контролировать Java, VM, который выполняет JConsole, просто щелкает по Connect, используя узел localhost и порт 0.
Соединение Используя Службу JMX URL
Можно также использовать опцию Remote Process, чтобы соединиться с другими агентами JMX, определяя их службу JMX URL, и имя пользователя и пароль. Синтаксис службы JMX, URL требует, чтобы Вы обеспечили транспортный протокол, используемый, чтобы сделать соединение, так же как точку доступа службы. Полный синтаксис для службы JMX URL описывается в документации API для javax.management.remote.JMXServiceURL.
Рисунок 3-4, Соединяющийся с Агентом JMX Используя Службу JMX URL
Если агент JMX использует соединитель, который не включается в платформу Java, Вы должны добавить классы соединителя пути к классу, когда Вы выполняете команду jconsole, следующим образом.
В команде выше, connector-path является каталогом или архивом Java (Фляга) файл, содержащий классы соединителя, которые не включаются в JDK, которые должны использоваться JConsole.
Представление Вкладок JConsole
Как только Вы соединили JConsole с приложением, JConsole составляется из шести вкладок.
Краткий обзор: информация о кратком обзоре Дисплеев о Java VM и контролируемые значения.
Память: информация о Дисплеях об использовании памяти.
Потоки: информация о Дисплеях об использовании потока.
Классы: информация о Дисплеях о загрузке класса.
VM: информация о Дисплеях о Java VM.
MBeans: информация о Дисплеях о MBeans.
Можно использовать зеленый значок состояния соединения в верхнем правом углу JConsole в любое время, чтобы разъединиться от или повторно соединить с рабочим Java VM. Можно соединить с любым числом рабочего Java VMs за один раз, выбирая Connection тогда New Connection из выпадающего меню.
Просмотр информации о Кратком обзоре
Вкладка Overview выводит на экран графическую информацию о контроле об использовании ЦП, использовании памяти, количествах потока, и классах, загруженных в Java VM, все в единственном экране.
Вкладка Краткого обзора рисунка 3-5
Вкладка Overview обеспечивает легкий способ коррелировать информацию, которая была ранее только доступна, переключаясь между многократными вкладками.
Сохранение Данных Диаграммы
JConsole позволяет Вам сохранять данные, представленные в диаграммах в Запятой Разделенные Значения (CSV) файл. Чтобы сохранить данные от диаграммы, просто щелкните правой кнопкой по любой диаграмме, выберите Save data as..., и затем определите файл, в котором будут сохранены данные. Можно сохранить данные от любой из диаграмм, выведенных на экран на любой из различных вкладок JCONSOLE таким образом.
Формат CSV обычно используется для обмена данными между приложениями для обработки электронных таблиц. Файл CSV может быть импортирован в приложения для обработки электронных таблиц и может использоваться, чтобы создать схемы в этих приложениях. Данные представляются как два или больше именованных столбца, где первый столбец представляет метки времени. После импорта файла в приложение для обработки электронных таблиц Вы должны будете обычно выбирать первый столбец и изменять его формат, чтобы быть "датой" или "датой/временем" как соответствующей.
Контроль Потребления Памяти
Вкладка Memory предоставляет информацию о потреблении памяти и пулах памяти.
Вкладка Памяти рисунка 3-6
Вкладка Memory обладает кнопкой “Perform GC”, которую можно нажать, чтобы выполнить сборку "мусора" всякий раз, когда Вы хотите. Диаграмма показывает использование памяти Java VM в течение долгого времени для "кучи" и памяти не"кучи", так же как для определенных пулов памяти. Память объединяет в пул доступный, зависят, на которой версии Java используется VM. Для Java HotSpot VM пулы памяти для последовательной сборки "мусора" являются следующим.
Пространство рая ("куча"): пул, от которого память первоначально выделяется для большинства объектов.
Пространство оставшегося в живых ("куча"): пул, содержащий объекты, которые пережили сборку "мусора" пространства Рая.
Генерация Tenured ("куча"): пул, содержащий объекты, которые существовали в течение некоторого времени в пространстве оставшегося в живых.
Постоянная Генерация (не"куча"): пул, содержащий все отражающие данные виртуальной машины непосредственно, такой как класс и объекты метода. С Java VMs, которые используют совместное использование данных класса, эта генерация, делятся на области чтения-записи и только для чтения.
Кэш кода (не"куча"): VM Java HotSpot также включает кэш кода, содержа память, которая используется для компиляции и хранения собственного кода.
Можно вывести на экран различные диаграммы для того, чтобы строить диаграмму потребления этих пулов памяти, выбирая из опций в Chart выпадающее меню. Кроме того, щелчок или столбиковых диаграмм "Кучи" или Не"кучи" в нижнем правом углу переключит выведенную на экран диаграмму. Наконец, можно определить, что время передвигается, по которому Вы отслеживаете использование памяти, выбирая из опций в Time Range выпадающее меню.
Для получения дополнительной информации об этих пулах памяти, см. Сборку "мусора" ниже.
Область Деталей показывает несколько текущих метрик памяти:
Используемый: объем памяти, в настоящий момент используемый, включая память, занятую всеми объектами, и достижимыми и недостижимыми.
Фиксировавший: объем памяти, который, как гарантируют, будет доступен для использования Java VM. Количество фиксировавшей памяти может измениться в течение долгого времени. Виртуальная машина Java может выпустить память к системе, и количество фиксировавшей памяти могло быть меньше чем объем памяти, первоначально выделенный при запуске. Количество фиксировавшей памяти всегда будет больше чем или равным на сумму используемой памяти.
Максимальный: максимальный объем памяти, который может использоваться для управления памятью. Его значение может измениться или быть неопределено. Выделение памяти может перестать работать, если Java, VM пытается увеличить используемую память, чтобы быть больше чем фиксировавшая память, даже если используемое количество меньше чем или равно max (например, когда система низка на виртуальной памяти).
Время GC: совокупное время, проведенное на сборке "мусора" и общем количестве вызовов. У этого могут быть многократные строки, каждая из которых представляет один алгоритм сборщика "мусора", используемый в Java VM.
Столбиковая диаграмма на более низкой правой стороне показывает память, использованную пулами памяти в памяти не"кучи" и "куче". Панель покраснеет, когда используемая память превысит порог использования памяти. Можно установить порог использования памяти через атрибут MemoryMXBean.
"Куча" и Память Не"кучи"
Java VM управляет двумя видами памяти: "куча" и память не"кучи", оба из которых создаются, когда Java VM запускается.
Память "кучи" является областью данных времени выполнения, от которой Java VM выделяет память для всех экземпляров класса и массивов. "Куча" может иметь фиксированный или переменный размер. Сборщик "мусора" является автоматической системой управления памяти, которая исправляет память "кучи" для объектов.
Память не"кучи" включает область метода, совместно использованную среди всех потоков и памяти, требуемой для внутренней обработки или оптимизации для Java VM. Это хранит структуры на класс, такие как пул константы этапа выполнения, поле и данные метода, и код для методов и конструкторов. Областью метода является логически часть "кучи", но, в зависимости от реализации, Java, VM, возможно, не собирает "мусор" или уплотняет это. Как память "кучи", область метода может иметь фиксированный или переменный размер. Память для области метода не должна быть непрерывной.
В дополнение к области метода Java VM может потребовать памяти для внутренней обработки или оптимизации, которая также принадлежит памяти не"кучи". Например, Своевременное (JIT) компилятор требует памяти для того, чтобы сохранить собственный машинный код, преобразованный из Java код VM для высокой производительности.
Пулы памяти и Распределители памяти
Пулы памяти и распределители памяти являются ключевыми аспектами системы памяти VM's Java.
Пул памяти представляет область памяти, которой управляет Java VM. Java у VM есть по крайней мере один пул памяти и это может создать или удалить пулы памяти во время выполнения. Пул памяти может принадлежать или "куче" или памяти не"кучи".
Распределитель памяти управляет одним или более пулами памяти. Сборщик "мусора" является типом распределителя памяти, ответственного за исправление памяти, используемой недостижимыми объектами. У Java VM могут быть один или более распределителей памяти. Это может добавить или удалить распределители памяти во время выполнения. Пулом памяти может управлять больше чем один распределитель памяти.
Сборка "мусора"
Сборка "мусора" (GC) - то, как Java, VM освобождает память, занятую объектами, на которые больше не ссылаются. Распространено думать об объектах, у которых есть активные ссылки, как являющиеся "живым" и нессылаемым (или недостижимый) объекты как "мертвые". Сборка "мусора" является процессом выпуска памяти, используемой мертвыми объектами. У алгоритмов и параметров, используемых GC, может быть сильное воздействие на производительности.
Java HotSpot сборщик "мусора" VM использует generational GC. GC Generational использует в своих интересах наблюдение, что большинство программ соответствует следующим обобщениям.
Они создают много объектов, у которых есть короткие жизни, например, iterators и локальные переменные.
Они создают некоторые объекты, у которых есть очень длинные жизни, например, высокий уровень персистентные объекты.
GC Generational делит память на несколько поколений, и присваивает один или более пулов памяти каждому. Когда генерация израсходовала свою выделенную память, VM выполняет частичный GC (также названный незначительным набором) на том пуле памяти, чтобы исправить память, используемую мертвыми объектами. Этот частичный GC обычно намного быстрее чем полный GC.
Java HotSpot VM определяет два поколения: молодая генерация (иногда называемый "детской") и старая генерация. Молодая генерация состоит из "Пространства рая" и двух "пробелов оставшегося в живых." VM первоначально присваивает все объекты пространству Рая, и большинство объектов умирает там. Когда это выполняет незначительный GC, VM перемещает любые остающиеся объекты от пространства Рая до одних из пробелов оставшегося в живых. VM перемещает объекты, которые живут долго достаточно в пробелах оставшегося в живых к пространству "tenured" в старой генерации. Когда tenured генерация заполняется, есть полный GC, который часто намного медленнее, потому что это включает все живые объекты. Постоянная генерация содержит все отражающие данные виртуальной машины непосредственно, такой как объекты метода и класс.
Расположение по умолчанию поколений смотрит что-то как рисунок 3-7.
Поколения рисунка 3-7 Данных в Сборке "мусора"
Если сборщик "мусора" стал узким местом, можно улучшить производительность, настраивая размеры генерации. Используя JConsole, можно исследовать чувствительность своей метрики производительности, экспериментируя с параметрами сборщика "мусора". Для получения дополнительной информации см. Настраивающуюся Сборку "мусора" с 5.0 HotSpot VM.
Контроль Использования Потока
Вкладка Threads предоставляет информацию об использовании потока.
Вкладка Потоков рисунка 3-8
Список Потоков в левом нижнем углу перечисляет все активные потоки. Если Вы введете строку в поле Filter, то список Потоков покажет только те потоки, имя которых содержит строку, которую Вы вводите. Щелкните по имени потока в списке Потоков, чтобы вывести на экран информацию о том потоке направо, включая имя потока, состояние, и трассировку стека.
Диаграмма показывает число живых потоков в течение долгого времени. Две строки показывают.
Красный: пиковое число потоков
Синий: число живых потоков.
MXBean Поточной обработки обеспечивает несколько других полезных операций, которые не покрываются вкладкой Threads.
findMonitorDeadlockedThreads: Обнаруживает, если какие-либо потоки заводятся в тупик на объектных блокировках монитора. Эта работа возвращает массив заведенных в тупик ID потока.
getThreadInfo: Возвращает информацию о потоке. Это включает имя, трассировку стека, и блокировку монитора, что поток в настоящий момент блокируется на, если таковые вообще имеются, и какой поток содержит ту блокировку, так же как статистику конкуренции потока.
getThreadCpuTime: Возвращает процессорное время, использованное данным потоком
Можно получить доступ к этим дополнительным функциям через вкладку MBeans, выбирая Поточную обработку MXBean в дереве MBeans. Этот MXBean перечисляет все атрибуты и операции для того, чтобы получить доступ к информации о поточной обработке в Java VM быть контролируемым. См. Контроль и Управление MBeans.
Обнаружение Заведенных в тупик Потоков
Чтобы проверить, столкнулось ли Ваше приложение с мертвой блокировкой (например, Ваше приложение, кажется, зависает), заведенные в тупик потоки могут быть обнаружены, щелкая по кнопке "Detect Deadlock". Если какие-либо заведенные в тупик потоки обнаруживаются, они выводятся на экран на новой вкладке, которая появляется рядом с вкладкой "Threads", как показано в рисунке 3-9.
Рисунок 3-9 Заведенные в тупик Потоки
Кнопка Detect Deadlock обнаружит циклы мертвой блокировки, включающие объектные мониторы и java.util.concurrent ownable синхронизаторы (см. документацию спецификации API для java.lang.management. LockInfo). Контроль поддержки блокировок java.util.concurrent был добавлен в Java SE 6. Если JConsole соединит с J2SE 5.0 VM, то Обнаружить механизм Мертвой блокировки только сочтет мертвые блокировки связанными с объектными мониторами. JConsole не будет показывать мертвых блокировок, связанных с ownable синхронизаторами.
См. документацию API для java.lang.Thread для получения дополнительной информации о потоках демона и потоках.
Контроль Загрузки Класса
Вкладка Classes выводит на экран информацию о загрузке класса.
Вкладка Классов рисунка 3-10
Диаграмма графически изображает числа классов, загруженных в течение долгого времени.
Красная строка является общим количеством загруженных классов (включая впоследствии разгруженных).
Синяя строка является текущим числом загруженных классов.
Раздел Деталей у основания вкладки выводит на экран общее количество классов, загруженных начиная с Java запущенный VM, число, в настоящий момент загруженное и разгруженное число. Можно установить трассировку класса, загружающегося к многословному выводу, проверяя флажок в главный правый угол.
Просмотр информация о VM
Вкладка VM Summary предоставляет информацию о Java VM.
Рисунок 3-11 Сводная Вкладка VM
Информация, представленная на этой вкладке, включает следующий.
Сводка
Время работы: Общая сумма времени начиная с Java VM была запущена.
Обработайте Процессорное время: Общая сумма процессорного времени, которое использовал Java VM, так как это было запущено.
Полное Время компиляции: Полное накопленное время проводится в JIT-компиляции. VM Java определяет, когда JIT-компиляция происходит. Горячая точка VM использует адаптивную компиляцию, в которой VM запускает приложение, используя стандартный интерпретатор, но тогда анализирует код, поскольку это работает, чтобы обнаружить узкие места производительности, или "горячие точки".
Потоки
Живые потоки: Текущее число живого демона распараллеливает плюс потоки недемона.
Пик: Самое большое количество живых потоков начиная с Java VM запускалось.
Потоки демона: Текущее число живых потоков демона.
Полные потоки запускались: Общее количество потоков, запущенных начиная с Java, VM запускался, включая демона, недемона, и завершал потоки.
Классы
Текущие классы загружались: Число классов в настоящий момент загружалось в память.
Полные классы загружались: Общее количество классов, загруженных в память начиная с Java, который VM запустил, включая тех, которые были впоследствии разгружены.
Полные классы разгрузились: Число классов, разгруженных из памяти начиная с Java VM, запускалось.
Память
Текущий размер "кучи": Число килобайтов в настоящий момент занимается "кучей".
Фиксировавшая память: Общая сумма памяти выделяется для использования "кучей".
Максимальный размер "кучи": Максимальное количество килобайтов занимается "кучей".
Объекты, ожидающие для завершения: Число объектов, ожидающих для завершения.
Сборщик "мусора": информация о сборке "мусора", включая имена сборщика "мусора", число наборов выполняемое, и полное время, проведенное, выполняя GC.
Операционная система
Полная физическая память: Количество памяти произвольного доступа (RAM) операционная система имеет.
Свободная физическая память: Количество свободной RAM, доступной операционной системе.
Фиксировавшая виртуальная память: Количество виртуальной памяти, которая, как гарантируют, будет доступна рабочему процессу.
Другая информация
Параметры VM: входные параметры приложение, которое передают к Java VM, не включая параметры основному методу.
Путь к классу: путь к классу, который используется системным загрузчиком класса, чтобы искать файлы класса.
Путь к библиотеке: список путей, чтобы искать, загружая библиотеки.
Загрузите путь к классу: путь к классу начальной загрузки используется загрузчиком класса начальной загрузки, чтобы искать файлы класса.
Контроль и Управление MBeans
Вкладка MBeans выводит на экран информацию обо всем MBeans, зарегистрированном в платформе сервер MBean универсальным способом. Вкладка MBeans позволяет Вам получать доступ к полному комплекту платформы инструментарий MXBean, включая то, что не видимо на других вкладках. Кроме того, можно контролировать и управлять MBeans своего приложения использование вкладки MBeans.
Рисунок 3-12 Вкладка MBeans
Дерево на левых шоу все в настоящий момент рабочее MBeans. Когда Вы выбираете MBean в дереве, его MBeanInfo и его Дескриптор MBean и выводятся на экран справа, и любые атрибуты, операции или уведомления появляются в дереве ниже его.
Вся платформа MXBeans и их различные операции и атрибуты доступна через вкладку MBeans JCONSOLE.
Построение Дерева MBean
По умолчанию MBeans выводятся на экран в дереве, основанном на их именах объектов. Порядок ключевых свойств, определенных, когда имена объектов создаются, сохраняется JConsole, когда это добавляет MBeans к дереву MBean. Точный ключевой список свойств, который JConsole будет использовать, чтобы создать дерево MBean, будет тем, возвращенным методом ObjectName.getKeyPropertyListString(), с type как первый ключ, и j2eeType, если есть как второй ключ.
Однако, доверие порядку по умолчанию свойств ключа ObjectName может иногда приводить к неожиданному поведению, когда JConsole представляет дерево MBean. Например, если у двух имен объектов будут подобные ключи, но их ключевой порядок отличается, то соответствующий MBeans не будет создаваться под тем же самым узлом в дереве MBean.
Например, предположите, что Вы создаете Triangle объекты MBean со следующими именами.
Насколько технология JMX затрагивается, эти объекты будут обработаны точно таким же образом. Порядок ключей в имени объекта не имеет никакого значения к технологии JMX. Однако, если JConsole соединится с этими MBeans, и рендеринг дерева MBean по умолчанию используется, то объектный com.sun.example:type=Triangle,name=2,side=isosceles закончит тем, что был создан под узлом Triangle в узле под названием 2, который поочередно будет содержать подузел под названием isosceles. Другие два равнобедренных треугольника, name=1 и name=3, будут группироваться под Triangle в различном узле под названием isosceles, как показано в рисунке 3-13.
Пример рисунка 3-13 Неожиданного Древовидного Рендеринга MBean
Чтобы избежать этой проблемы, можно определить порядок, в котором MBeans выводятся на экран в дереве, предоставляя упорядоченный ключевой список свойств, когда Вы запускаете JConsole в командной строке. Это достигается, устанавливая системное свойство com.sun.tools.jconsole.mbeans.keyPropertyList, как показано в следующей команде.
Ключевое системное свойство списка свойств берет список разделенных запятой значений ключей в порядке Вашего выбора, где key должен быть строкой, представляющей ключ имени объекта или пустую строку. Если ключ, определенный в списке, не применится к определенному MBean, то тот ключ будет отброшен. Если у MBean будет больше ключей чем те определенные в ключевом списке свойств, то ключевой порядок, определенный значением, возвращенным ObjectName.getKeyPropertyListString(), будет использоваться, чтобы завершить ключевой порядок, определенный keyPropertyList. Поэтому, определение пустого списка ключей просто означает, что JConsole выведет на экран ключи в порядке, они появляются в ObjectName MBEAN.
Так, возвращаясь к примеру Triangle MBeans, процитированный выше, Вы могли хотеть запускать JConsole определение системного свойства keyPropertyList, так, чтобы весь Ваш MBeans был сгруппирован согласно их свойству ключа side сначала, и их второму свойству ключа name. Чтобы сделать это, Вы запустили бы JConsole со следующей команды.
Запуск JConsole с этим системным определенным свойством произвел бы дерево MBean, показанное в рисунке 3-14.
Пример рисунка 3-14 Дерева MBean, Созданного Используя keyPropertyList
В рисунке 3-14 ключ side на первом месте, сопровождаемый ключом name. Ключ type прибывает в конец, потому что это не было определено в ключевом списке свойств, таким образом, древовидный алгоритм MBean, примененный исходный ключевой порядок на остающиеся ключи. Следовательно, ключ type добавляется в конце после ключей, которые были определены системным свойством keyPropertyList.
Согласно соглашению имени объекта, определенному JMX Лучшие Инструкции по Методам, должен всегда быть на первом месте ключ type. Так, чтобы уважать это соглашение, следует запустить JConsole со следующего системного свойства.
Выбор узла Атрибутов выводит на экран все атрибуты MBean. Рисунок 3-16 показывает все атрибуты платформы Поточной обработки MXBean.
Рисунок 3-16, Просматривающий Все Атрибуты MBean
Выбор отдельного атрибута MBean от дерева тогда выводит на экран значение атрибута, его MBeanAttributeInfo, и связанный Дескриптор в правильной области, как можно видеть в рисунке 3-17.
Рисунок 3-17, Просматривающий Отдельный Атрибут MBean
Можно вывести на экран дополнительную информацию об атрибуте, дважды щелкая по значению атрибута, если это кажется полужирным текст. Например, если Вы щелкнете по значению атрибута HeapMemoryUsagejava.lang.Memory MBean, то Вы будете видеть диаграмму, которая смотрит что-то как рисунок 3-18.
Рисунок 3-18, Выводящий на экран Значения атрибута
Двойной щелчок по числовым значениям атрибута выведет на экран диаграмму, которая графически изображает изменений в том числовом значении. Например, дважды щелкая по атрибуту CollectionTime Сборщика "мусора" MBean PS Marksweep графически изобразит времени, проведенного, выполняя сборку "мусора".
Можно также использовать JConsole, чтобы установить значения перезаписываемых атрибутов. Значение перезаписываемого атрибута выводится на экран в синем. Здесь можно видеть Многословный атрибут MBEAN Памяти.
Рисунок 3-19, Устанавливающий Перезаписываемые Значения атрибута
Можно установить атрибуты, щелкая по ним и затем редактируя их. Например, чтобы включить или отключить многословную трассировку сборщика "мусора" в JConsole, выберите Память MXBean на вкладке MBeans и установите атрибут Verbose в истину или ложь. Точно так же у класса, загружающего MXBean также, есть атрибут Verbose, который может быть установлен включить или отключить класс, загружающий многословную трассировку.
Операции MBean
Выбор узла Операций выводит на экран все операции MBean. Операции MBean появляются как кнопки, которые можно нажать, чтобы вызвать работу. Рисунок 3-20 показывает все операции платформы Поточной обработки MXBean.
Рисунок 3-20, Просматривающий Все Операции MBean
Выбор отдельной работы MBean в дереве выводит на экран кнопку для того, чтобы вызвать работу MBean, и MBeanOperationInfo работы и его Дескриптор, как показано в рисунке 3-21.
Рисунок 3-21, Просматривающий Отдельные Операции MBean
Уведомления MBean
Можно подписаться, чтобы получить уведомления, выбирая узел Уведомлений в левом дереве, и нажимая кнопку Subscribe, которая появляется справа. Число полученных уведомлений выводится на экран в квадратных скобках, и узел самих уведомлений будет казаться полужирным текст, когда новые уведомления будут получены. Уведомления о платформе Памяти MXBean показывают в рисунке 3-22.
Рисунок 3-22, Просматривающий Уведомления MBean
Выбор отдельного уведомления MBean выводит на экран MBeanNotificationInfo в правильной области, как показано в рисунке 3-23.
Рисунок 3-23, Просматривающий Отдельные Уведомления MBean
Диагностика HotSpot MXBean
Вкладка MBeans JCONSOLE также позволяет Вам говорить HotSpot VM, чтобы выполнить дамп "кучи", и получить или установить опцию VM через HotSpotDiagnostic MXBean.
Можно выполнить дамп "кучи" вручную, вызывая MXBean's com.sun.management.HotSpotDiagnostic работа dumpHeap. Кроме того, можно определить опцию VM Java HeapDumpOnOutOfMemoryError, используя работу setVMOption, так, чтобы VM выполнил дамп "кучи" автоматически всякий раз, когда это получает OutOfMemoryError.
Создание Пользовательских Вкладок
В дополнение к существующим стандартным вкладкам можно добавить свои собственные вкладки к JConsole, чтобы выполнить Ваши собственные контрольные действия. Сменный API JConsole обеспечивает механизм, которым можно, например, добавить вкладку, чтобы получить доступ к MBeans Вашего собственного приложения. Сменный API JConsole определяет абстрактный класс com.sun.tools.jconsole.JConsolePlugin, который можно расширить, чтобы создать Ваш пользовательский плагин.
Как указано выше Ваш плагин должен расширить JConsolePlugin, и реализовать
методы JConsolePlugingetTabs И newSwingWorker. Метод getTabs возвращает или список вкладок, которые будут добавлены к JConsole, или пустому списку. Метод newSwingWorker возвращает SwingWorker, чтобы быть ответственным за обновление GUI плагина.
Ваш плагин должен быть обеспечен в архиве Java (JAR) файл, который содержит файл под названием META-INF/services/com.sun.tools.jconsole.JConsolePlugin. Этот файл самого JConsolePlugin содержит список всех полностью определенных имен классов плагинов, которые Вы хотите добавить как новые вкладки JConsole. JConsole использует поставщика услуг, загружающего средство, чтобы искать и загрузить плагины. У Вас могут быть многократные плагины с одной записью на плагин в JConsolePlugin.
Чтобы загрузить новые пользовательские плагины в JConsole, запустите JConsole со следующей команды:
% jconsole -pluginpath plugin-path
В вышеупомянутой команде plugin-path определяет пути к плагинам JConsole, которые будут искаться. Эти пути могут или быть к именам каталогов или к файлам JAR, и разнообразные пути могут быть определены, используя стандартный символ разделителя Вашей платформы.
Примеру плагин JConsole предоставляют Java SE 6 платформ. Приложение JTop является демонстрацией JDK, которая показывает использование ЦП всех потоков, работающих в приложении. Этот демонстрационный пример полезен для идентификации потоков, у которых есть высокое потребление ЦП, и это было обновлено, чтобы использоваться в качестве плагина JConsole так же как автономного GUI. JTop связывается Java SE 6 платформ как демонстрационное приложение. Можно выполнить JConsole с плагином JTop, выполняя следующую команду:
Если Вы соединитесь с этим экземпляром JConsole, то Вы будете видеть, что вкладка JTop была добавлена, показывая использование ЦП различного выполнения потоков.