Java Mission Control 7.1 показывает слишком мало примеров профилирования - PullRequest
1 голос
/ 07 марта 2019

Аналогичный вопрос был задан здесь .

Я профилирую приложение Open JDK 11.0.2, используя JMC 7.1.0, которое я построил в соответствии с инструкциями .

Приложение использует около 3 ядер, нет избыточного gc, и только небольшая часть потоков времени выполняет вызовы собственных методов, которые фактически используют ЦП.

Я использую интервал выборки по умолчанию, равный 10 мс. Я включил метаданные отладки за пределы безопасных точек, используя:

-XX: + UnlockDiagnosticVMOptions -XX: + DebugNonSafepoints

Количество взятых образцов намного меньше, чем я ожидаю. Если предположить, что в потоке ЦП 1 выполняется неродной код в каждой точке выборки, то можно ожидать 100 выборок в секунду. Все же я вижу только 1 образец / секунду.

cpu usage & method samples

Сам аппарат обычно на 50% простаивает, поэтому поток пробоотбора не голодает.

Что может быть причиной того, что количество образцов будет таким низким?

1 Ответ

1 голос
/ 20 марта 2019

Вероятно, это связано с ошибкой, внесенной в JDK 11, которая появляется в приложениях с большим количеством потоков.Это было исправлено в JDK 12 и перенесено в 11.0.3.

Подробнее см .:

https://bugs.openjdk.java.net/browse/JDK-8215727

Относительно интервала выборки.Скорость по умолчанию составляет 20 мс, но это не значит, что будет 50 отсчетов в секунду.Это интервал, который JVM пытается выбрать из одного или более потоков.

...