Имя утилиты Размер (байт)
jconsole.exe 16,776
jinfo.exe
16,264
jmap.exe
16,264
jstack.exe
16,264
javap.exe
15,752
jhat.exe
15,752
jps.exe
15,752
jstat.exe
15,752
Я не случайно привел размер каждой утилиты, так как он практически у всех идентичный (~16-17 Кб). По факту, каждая из утилит реализована на Java, а в момент сборки в качестве шаблона используется простейшая утилита реализованная на языке C, которая ищет JRE, затем парсит аргументы, создает JVM, ищет Java-класс утилиты и вызывает соответствующий метод main. Исходной код можно найти здесь (${JDK_SOURCE}/jdk/src/share/classes/sun/ или ${JDK_SOURCE}/langtools/src/share/classes/com/sun/tools/).
Любую из утилит можно использовать в своем приложении. Для этого необходимо в classpath добавить библиотеку tools.jar (${JDK_DIR}/lib/tools.jar).
Любую из утилит можно использовать в своем приложении. Для этого необходимо в classpath добавить библиотеку tools.jar (${JDK_DIR}/lib/tools.jar).
Рассмотрим самые наиболее популярные из них.
Утилита показывающая список JVM (в формате < ID процесса > < Main класс >) запущенных локально или удаленно (для этого необходимо в параметрах хост удаленной системы).
Графическая утилита для мониторинга JVM запущенной на локальной или удаленной системе. JConsole использует расширенные возможности JVM и предоставляет информацию касательно производительности, потребляемой памяти, потоков приложения, загруженных классов. Запустить утилиту можно из командной строки введя команду jconsole (появится диалоговое окно выбора JVM для мониторинга), также в качестве параметров можно указать ID процесса (если JVM запущена локально) или имя хоста и порт (если JVM запущена удаленно).
jps
(sun.tools.jps.Jps)Утилита показывающая список JVM (в формате < ID процесса > < Main класс >) запущенных локально или удаленно (для этого необходимо в параметрах хост удаленной системы).
jconsole
(sun.tools.jconsole.JConsole)Графическая утилита для мониторинга JVM запущенной на локальной или удаленной системе. JConsole использует расширенные возможности JVM и предоставляет информацию касательно производительности, потребляемой памяти, потоков приложения, загруженных классов. Запустить утилиту можно из командной строки введя команду jconsole (появится диалоговое окно выбора JVM для мониторинга), также в качестве параметров можно указать ID процесса (если JVM запущена локально) или имя хоста и порт (если JVM запущена удаленно).
jinfo
(sun.tools.jinfo.JInfo)Утилита позволяющая узнать конфигурацию запущенной JVM (для этого в параметрах нужно указать ID процесса): версию JVM, системные параметры, флаги.
jmap
(sun.tools.jmap.JMap)Утилита показывающая список объектов разделяемой памяти (shared object memory), либо объектов находящихся в heap'е. Для запуска утилиты необходимо указать ID процесса. В зависимости от параметров возможно получение следующей информации:
- Если нет дополнительных аргументов, то выводится список объектов разделяемой памяти. Для каждого объекта указывается стартовый адрес, размер маппинга и полный путь до файла данного объекта.
- -dump:format=b,file=< путь к файлу для дампа > - создается дамп heap'a в бинарном формате hprof. Для того чтобы просмотреть объекты находящиеся в дампе можно воспользоваться стандартной утилитой jhat (будет рассмотрена далее), либо использовать более удобное средство - Eclipse Memory Analyzer.
- -finalizerinfo - выводит список объектов ожидающих финализацию (finalization).
- -histo - выводит гистограмму объектов находящихся в heap'e. Для каждого класса выводится информация о количестве объектов, размере используемой памяти.
- -permstat - выводит расширенную статистику по загрузчикам классов (class loader). Для каждого загрузчика классов выводится его имя, адрес, родительский загрузчик классов (parent class loader), количество и размер загруженных классов.
jstack
(sun.tools.jstack.JStack)Утилита печатающая все стэктрэйсы (stacktrace) JVM запущенной локально (необходимо указать ID процесса), либо удаленно (< ID процесса >@< IP адрес системы на которой запущена JVM >). Если утилита запущена с параметром -m (mixed mode), то также выводится стэктрэйс нативных методов.
javap
(com.sun.tools.javap.Main)Утилита позволяющая декомпилировать class-файл. В качестве параметра необходимо указать путь к файлу класса. В зависимости от параметров возможно получение следующей информации:
- Если нет дополнительных параметров, то выводится информация о пакете класса (package), родительский класс, список методов и их сигнатуры.
- -c - В дополнении к базовой информации о классе, выводится список байткодов.
- -verbose - Выводит информацию о размере стека, количестве локальных переменных и аргументов.
Из всех параметров самый важный это verbose - с помощью него можно получить практически всю информацию о классе.
jhat
(com.sun.tools.hat.Main)Утилита позволяющая анализировать heap дампы через веб интерфейс и DSL OQL (Object Query Language) (SQL-подобный язык запросов) . Дамп для анализа можно получить одним из следующих способов:
- Использовать утилиту jmap (была описана ранее);
- С помощью утилиты jconsole (была описана ранее) можно получить дамп используя MBean HotSpotDiagnosticMXBean;
- Дамп будет сгенерирован в случае возникнования OutOfMemory и при этому у JVM была указана опция -XX:+HeapDumpOnOutOfMemoryError;
- Использовать утилиту hprof.
Помимо самого дамп файла, в качестве параметров можно указать порт для веб интерфейса (по умолчанию 7000).
jstat
(sun.tools.jstat.Jstat)Такие дела,
Иван.
No comments:
Post a Comment