Запуск cachegrind в OpenJDK JVM

Я хочу использовать cachegrind для профилирования производительности в JVM OpenJDK. (Кстати, если это не хорошая идея, я хотел бы понять, почему.)

Проблема в том, что он продолжает вызывать утверждения в JVM. Итак, что я могу сделать, чтобы запустить использование cachegrind. Или, пожалуйста, скажите мне, почему это не сработает. И если вы можете предложить альтернативу cachegrind. (Обратите внимание, что я посмотрел и использовал perf. Просто мне было любопытно, насколько разные инструменты, такие как cachegrind/callgrind, будут с точки зрения результатов.)

1 ответ

Решение

Valgrind и инструменты на его основе обычно не очень хороши для профилирования производительности. Valgrind - это разновидность виртуальной машины, которая не выполняет исходный код напрямую, а переводит его. Программы часто работают намного медленнее в Valgrind, и это может повлиять на сценарий выполнения приложения.

Также Valgrind не очень хорошо работает с динамическим и самоизменяющимся кодом. Что касается JIT-компиляции JVM, это может привести к случайным ошибкам утверждений и сбоям JVM, которые вы, очевидно, наблюдаете. Известно, что Valgrind намного стабильнее, когда Java запускается с отключенной JIT, т.е. -Xint, Но в -Xint Режим профилирования не имеет особого смысла, поскольку он не отражает реальную производительность приложения.

perf предпочтительный способ сделать этот вид измерений. perf опирается на аппаратные счетчики, он не изменяет исполняемый код. Для более глубокого анализа производительности есть Intel VTune Amplifier. Это не бесплатно, но доступна пробная версия.

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