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 с указанными выше параметрами, вот вывод, который будет сгенерирован:
Метка времени — время с момента начала целевой 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 в приведенном выше примере:
Отметка | Время с момента запуска 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 вы не узнаете:
- Если в одноразовой выборке сообщается о нескольких событиях GC , мы не будем знать, каково было время паузы каждого события GC.
- Сколько времени тратится в Sys (т.е. ядро), пользователь (т.е. слой Java)
- Сколько потоков GC работает и сколько времени они занимают?
- Одно событие GC имеет несколько подфаз (например, начальная отметка, очистка, замечание, одновременная отметка …). Этот распад информации не доступен.
- Сколько байтов восстанавливается каждым событием GC
(Б). Иногда данные, сообщаемые jstat, также могут вводить в заблуждение .
Если вы хотите провести точный анализ ГХ, журналы ГХ являются более надежным способом.
Опубликовано на Java Code Geeks с разрешения Рама Лакшманана, партнера нашей программы JCG . Смотреть оригинальную статью здесь: JSTAT — Анализ Мнения, высказанные участниками Java Code Geeks, являются их собственными. |