Санкт-Петербургская группа тестирования JVM


« JavaOne 2006, заверш... | Main | Java Standard Editio... »
20060529 понедельник Май 29, 2006

JConsole: кардиограмма вашей программы

Сегодня мы расскажем вам о JConsole, средстве диагностики работающего приложения Java.

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

Что же показывает JConsole? Рассмотрим каждую закладку.

Закладка Overview

Heap Memory Usage:

Threads:

Classes:

CPU Usage: процент процессорного времени.

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

 

Memory

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

Также вы можете увидеть время, затраченное на сборку мусора внизу, в поле GC time:

GC time:   6,960 seconds on Copy (2 254 collections)

11,616 seconds on MarkSweepCompact (77 collections)

Первое значение, это время на сборку мусора в Young Generation, название использующегося сборщика мусора (Copy = Copying GC) и количество сборок. Вторая строка, соответственно, показывает данные для Tenured или Old Generation.

Данные о работе сборщиков мусора в текстовой вы можете получить, запустив программу с опцией -verbose:gc.

Нажав на кнопку Perform GC, вы инициируете сборку мусора в обоих поколениях.

Закладка Threads

…покажет вам текущее количество нитей (live threads), их пиковое значение (peak). Кроме того вы можете посмотреть список нитей и информацию о каждой.

Вы можете отфильтровать нити в списке, введя любую часть названия в поле Filter.

Выбрав нить в списке, вы получаете следующую информацию о нити:

Похожую информацию вы можете получить, нажав Ctrl+\ или Ctrl+Break под Windows, или воспользовавшись утилитой jstack)

Кнопка "Detect Deadlock" обнаруживает все имеющиеся тупики (deadlocks) в программе. Они определяется компонентом ThreadMXBean, находящемся в отслеживаемом процессе. В Mustang определяются и тупики, в которых участвуют классы из java.util.concurrent (JSR 166).

Classes

Здесь вы увидите количество классов, загруженных в данный момент (Loaded), общее кол-во классов, которые были загружены за период, считая выгруженные (Total Loaded) и кол-во классов, которые были выгружены GC (Total classes unloaded).

Если вы включите галочку Verbose Output, консоль приложения начнет выводить имена загружаемых и выгружаемых классов. Это эквивалентно запуску процесса с опцией -verbose:class

Закладка VM Summary

В этой закладке есть много интересных данных о виртуальной машине, которую вы сейчас отслеживаете. Они довольно очевидны. Упомянем лишь несколько:

Закладка MBeans

Дело в том, что JConsole взаимодействует с отслеживаемым приложением по протоколу JMX, который, в свою очередь, работает через RMI. Когда вы подсоединяетесь к виртуальной машине, в ней запускается JMX-агент, использующий свой собственный реестр RMI (RMI registry). Этот агент создает управляющие объекты и объекты-датчики. Согласно спецификации JMX, они называются MBeans ("Management Beans").

Эти объекты уже имеются в JVM версий 6.0 и 1.5.0. Кроме того, приложение Java может добавлять собственные MBeans.

MBeans и протокол JMX позволяют:

Т.к. JMX-приложение может не знать всех типов "по другую сторону" соединения, им должны поддерживаться примитивные типы, java.lang.String, и некоторые другие. Для сложных объектов необходимо использовать типы javax.management.openmbean.CompositeData и TabularData.

Закладка MBeans предоставляет вам графический интерфейс к MBeans JVM и программы:

Вот несколько примеров уже существующих операций MBeans:

Подключение к приложениям

JConsole может подключаться:

Если вы не можете подключиться к приложению, почитайте FAQ здесь или здесь.

Ссылки

К. Ш.

 

опубликовал vmrobot ( май 29 2006, 08:16:53 PM MSD ) Permalink Комментарии [5]

Trackback URL: http://blogs.sun.com/vmrobot/entry/jconsole_%D0%BA%D0%B0%D1%80%D0%B4%D0%B8%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%B2%D0%B0%D1%88%D0%B5%D0%B9_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B
Комментарии:

Хорошая статья. Почаще выкладывайте. Спасибо

опубликовал serb Июнь 08, 2006 at 08:57 PM MSD #

Статья неплохая, но вот почему то не получается подключиться jconsole к локальному приложению, выдает сообщение: процесс такой то is not a managed VM

опубликовал Alex Сентябрь 09, 2006 at 09:38 AM MSD #

Alex, какая у вас версия JVM? Если 1.4.2, подключитесь только по URL и только если внутри приложения запущен собственный MBeanServer. Если у Вас 1.5.0 -- надо запускать с <code>-Dcom.sun.management.jmxremote</code>. Начиная с 6.0 подключаться к JVM можно безо всяких опций.

опубликовал Kirill Shirokov Январь 23, 2007 at 05:30 AM MSK #

Спасибо, интересная статья. Только вот картинки для закладок Classes и VM Summary неправильные.

опубликовал Dmitriy Апрель 06, 2007 at 04:59 PM MSD #

Спасибо, поправили.

опубликовал Kirill Shirokov Апрель 19, 2007 at 08:05 PM MSD #

Опубликовать комментарий:

Имя
E-Mail:
URL:

Ваш комментарий:

HTML Syntax: Отключен

Хиты страниц за сегодня: 13