Статьи

jstat — Анализ

jstat — это простой служебный инструмент, который присутствует в JDK для предоставления статистики, связанной с производительностью JVM, такой как сборка мусора, операции компиляции. Основным преимуществом jstat является его способность динамически собирать эти метрики, когда JVM работает без каких-либо необходимых инструментов. Что мы подразумеваем под этим? Скажем, например, если вы хотите собирать статистику, связанную со сборкой мусора, вам нужно передать ниже аргументы, прежде чем запускать JVM:

1
-Xlog:gc*:file={file-path}

Этот аргумент включит журналы GC и напечатает их по указанному пути к файлу. Предположим, вы не передали этот аргумент, и статистика, связанная с GC, не будет сгенерирована. Здесь jstat может пригодиться. Динамически вы можете подключиться к JVM и захватить GC, статистику, связанную с компиляцией, как показано ниже

Как запустить JSTAT?

Выполните команду ниже. Это простая опция для запуска jstat.

1
jstat -gc -t 11656 10000 30

-gc : будет выведена статистика, связанная со сборкой мусора

-t отметка времени с момента запуска JVM будет напечатана

11656: целевой идентификатор процесса JVM

10000: статистика будет печататься каждые 10 000 миллисекунд (т.е. 10 секунд).

30 : статистика будет напечатана за 30 итераций. Таким образом, вышеуказанная опция заставит JVM печатать метрики в течение 300 секунд (т.е. 10 секунд x 30 итераций).

(Обратите внимание, что помимо -gc вы можете передавать различные другие параметры для генерации различных наборов данных. Подробнее о различных параметрах см. Здесь .)

Данные, сгенерированные jstat

Когда вы запускаете jstat с указанными выше параметрами, вот вывод, который будет сгенерирован:

Рис: вывод jstat

Метка времени — время с момента начала целевой JVM в секундах.

S0C — Объем региона Survivor 0 в КБ

S1C — Объем региона Survivor 1 в КБ

S0U — Survivor 0 регион занял место в КБ

S1U — регион Survivor 1 занял место в КБ

EC — емкость региона Eden в КБ

ЕС — используемое пространство региона Эдема в КБ

OC — ​​Емкость старого региона в КБ

OU — Используемое пространство старого региона в КБ

MC — емкость метапространства в КБ

MU — Используемое пространство метапространства в КБ

CCSC — объем областей сжатого пространства в КБ

CCSU — области пространства сжатого класса, занимающие место в КБ

YGC — Количество событий Young GC, которые произошли на данный момент

YGCT — количество времени, проведённого молодёжью в GC

FGC — количество событий Full GC , которые произошли на данный момент

FGCT — количество времени полного GC, потраченного до настоящего времени

GCT — общее количество времени, проведенного GC (в основном YGCT + FGCT)

Как интерпретировать вывод JSTAT?

Оборудованный этой информацией, давайте попробуем интерпретировать первую строку, напечатанную инструментом jstat в приведенном выше примере:

Рис: первая строка вывода jstat
Отметка

Время с момента запуска JVM в секундах

= 164,9 секунды
Молодое поколение

Молодое поколение состоит из райского региона, Survivor 0, Survivor 1. Таким образом, мощность составляет:

S0C + S1C + EC

= 116224,0 + 116224,0 + 116736,0

= 349184 кб

= 341 мб

Молодое поколение использовало размер

S0U + S1U + EU

= 0 + 1520 + 68761,8

= 70281,8 кб

= 68,63 мб

Мощность старого поколения OC = 431616 кб

= 421,5 МБ

Старое поколение использовало размер

ОУ

= 280502,5 кб

= 273,93 мб

Метапространственная емкость MC

= 32384 КБ

= 31,62 мб

Используемый размер Metaspace MU = 31155,5 кб

= 30,42 МБ

Young GC Count

YGC

= 29

Время проведенное в Young GC YGCT

= 0,836 секунды

Общее время, проведенное в GC GCT = 2,27 секунды

Инструмент для анализа вывода JSTAT

Одна из проблем с jstat — вам нужно вручную анализировать сгенерированную статистику. Это будет утомительно, как вы можете видеть, чтобы понять / интерпретировать одну строку, это займет довольно много времени. Вы можете использовать инструмент GCeasy , который может анализировать вывод jstat и генерировать полезные графики и метрики. Вот отчет по анализу jstat, сгенерированный GCeasy путем анализа вышеприведенного вывода jstat.

Ограничение JSTAT

У jstat есть определенные ограничения:

(А). Jstat не предоставляет подробную информацию о деятельности GC. Это только обеспечивает достаточно информации. Пример из jstat вы не узнаете:

  1. Если в одноразовой выборке сообщается о нескольких событиях GC , мы не будем знать, каково было время паузы каждого события GC.
  2. Сколько времени тратится в Sys (т.е. ядро), пользователь (т.е. слой Java)
  3. Сколько потоков GC работает и сколько времени они занимают?
  4. Одно событие GC имеет несколько подфаз (например, начальная отметка, очистка, замечание, одновременная отметка …). Этот распад информации не доступен.
  5. Сколько байтов восстанавливается каждым событием GC

(Б). Иногда данные, сообщаемые jstat, также могут вводить в заблуждение .

Если вы хотите провести точный анализ ГХ, журналы ГХ являются более надежным способом.

Опубликовано на Java Code Geeks с разрешения Рама Лакшманана, партнера нашей программы JCG . Смотреть оригинальную статью здесь: JSTAT — Анализ

Мнения, высказанные участниками Java Code Geeks, являются их собственными.