Java JVM Monitoring

Утилита для мониторинга распределения Java-памяти


 

Приложение Jconsole, поставляемое вместе с пакетом Java JDK, предоставляет возможности по мониторингу распределения памяти между выделенными областями и фиксировать момент ее переполнения. В процессе мониторинга выделяются следующие события : потребление памяти, заполнение, сбор мусора в разрезе объектов : системной памяти, выделенной памяти,

Обзор распределения памяти


 

Heap Memory Usage:

  • Used: сколько памяти используется для всех поколений
  • Comitted: сколько всего системной памяти отведено для JVM
  • Max: максимальное количество системной памяти, которую JVM может попросить у системы

     

Threads:

  • Live: текущее кол-во нитей, кроме Daemon Threads
  • Peak: пиковое значение за период
  • Total: полное количество нитей

 

Classes:

  • Loaded: Количество классов, загруженных в данный момент
  • Unloaded: кол-во классов, которые были выгружены GC
  • Total: общее кол-во классов, которые были загружены за период (считая выгруженные)
  • CPU Usage: процент процессорного времени.

 

Детали распределения памяти

Heap Memory Usage: суммарное использование памяти областями Eden, Survivor Spaces и Tenured (AKA Old) Generation.

Non-Heap Memory Usage: суммарная память, необходимая для:

  • скомпилированных методов (code cache),
  • Permanent Generation данного процесса,
  • разделяемой между процессами Permanent Generation:
  • только для чтения (shared-ro)
  • для чтения и записи (shared-rw)

    .

Внизу можно увидеть время, затраченное на сборку мусора, в поле 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.

 

Закладка Threads

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

Доступна следующая информация о нити:

  • Название (из java.lang.Thread.getName(), или сформированное JVM)
  • Состояние:
    • RUNNABLE,
    • WAITING on <object>.
    • Нить вызвала <object>.wait()
    • TIMED_WAITING on … то же самое, но wait() был со временем ожидания
    • BLOCKED—нить блокировалась, пытаясь захватить объект синхронизации
    • TERMINATED—нить завершилась или была завершена
    • NEW—нить создана, но еще не начала выполняться
  • Total blocked—суммарное количество блокировок
  • Total waited—суммарное кол-во ожиданий
  • Stack trace—стек Java. Фреймы кода native и JVM не отображаются

     

По кнопке “Detect Deadlock” обнаруживает все имеющиеся тупики (deadlocks) в программе. Они определяется компонентом ThreadMXBean, находящемся в отслеживаемом процессе.

Закладка Classes


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

Закладка VM Summary


В частности отображает данные о :

  • Pending Finalization: кол-во объектов в Finalization Queue
  • Total compile time: время, затраченное JIT на компиляцию
  • Committed memory: память, запрошенная у системы под кучу
  • Committed virtual memory: сколько памяти отведено системой под JVM
  • Library path: путь, откуда будут загружаться native-библиотеки (java.lang.System.load()) и JVMTI-агенты.
  • Class path: CLASS_PATH
  • Boot class path: путь, откуда загружаются базовые классы.

Подключение к наблюдаемым серверам приложений

Для подключения необходимо выполнить следующие действия

  1. Иницализировать Java машину с необходимыми параметрами
  2. Выполнить подключение

     

    Пример инициализации Java машины

% java -Dcom.sun.management.jmxremote.port=7000 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar Application.jar \

 

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

 

% jconsole host.sun.com:2345