Профилирование Java-сервера и интерпретация графа пламени

Я профилирую Java-сервер. Я смотрю на график пламени: http://www.brendangregg.com/flamegraphs.html. У меня есть пара вопросов о том, как интерпретировать профиль пламени. Я новичок в Java, поэтому они могут звучать очень просто.

1) в профиле верхний фрейм, за которым я наблюдаю libjvm_so, занимает 38,6% процессорного времени. Это нормально в Java-процесс и сервер? Что это за общий объект и обычно ли он так много обрабатывает?

2) Что означает, что функция / стек принимает x%. Это относительный или абсолютный? х% от общего использования ЦП процессами или х% ЦП. Это подводит меня ко второму вопросу: когда я сравниваю 2 графика пламени, сравнивается ли нормализация по всем процессам, используемым процессором? то есть если метод занимает 10% в одном профиле и 15% в другом профиле, означает ли это, что функция фактически потребляет больше ресурсов процессора. Или это может быть случай начального процесса, общее использование процессора составляло 50%, но во втором процессе использование процессора составляло 30%, поэтому в абсолютном выражении второй профиль показывает снижение использования процессора для функции. ( 10% из 50% больше, чем 15% из 30%).

0 ответов

На вопрос 1:

Я думаю, что libjvm.so включает время, потраченное на компиляцию и сборку мусора. Если загрузка ЦП процесса высока и процесс выполняется некоторое время, то, как правило, не стоит тратить большое количество процессорного времени в libjvm.so, что может указывать на то, что процесс тратит больше времени на сборку или сборку, чем ожидалось. Если профиль был собран во время запуска процесса (и, таким образом, больше времени было уделено компиляции), этого можно ожидать.

На вопрос 2:

Проценты на графиках пламени обычно относятся к проценту от общего процессорного времени, используемого процессом. Таким образом, если в профиле отображается 5 с общего времени процессора, то метод, использующий 1 с общего времени процессора, будет показан как использующий 20% всего используемого процессорного времени.

Профили ЦП, собранные с помощью Stackdriver Profiler, собираются в течение 10 секунд, и их можно использовать для определения процента использования ЦП процессом. Например, профиль с итогом 5 с был собран, когда процесс использовал ~50% ЦП.

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

Общий обзор графиков пламени задокументирован здесь.

(Раскрытие информации: я работаю над Stackdriver Profiler в Google)

Другие вопросы по тегам