Using Java Flight Recorder (JFR) for JVM Applications #2
Replies: 1 comment 2 replies
-
Кажется, это несколько другой кейс. Можно профилировать JVM-специфичные события вроде аллокаций, плохой парковки виртуальных тредов или класслоадинга. Перфоратор сейчас целится в профилирование конкретно CPU, то есть "просто как процесс".
Если рассматривать Java-приложение в отрыве от всего остального, то в данный момент async-profiler, вероятно, будет лучшим вариантом (правда, настроить его доставку и обновление до всех Java-приложений будет сложнее, чем поставить на каждый хост агент перфоратора). Но уровень поддержки мы будем повышать в будущем. Помимо этого, если приложение сочетает Java и нативный код, то на нативном коде будет выигрывать уже перфоратор. Наконец, тут видится возможность кооперации - если научиться автоматически отгружать собранные async-profiler-ом профили в перфоратор, то можно будет из UI удобно смотреть на агрегированные профили по кластеру, и так далее. Возвращаясь к вопросу о JFR - прямо сейчас мы таким не занимаемся, но на мой взгляд это хороший feature request. |
Beta Was this translation helpful? Give feedback.
-
Привет.
Удивило решение для профилирования JVM приложений - https://perforator.tech/docs/en/guides/jvm.
Использование
-XX:+PreserveFramePointer
не кажется удачным решением.Стандартом профилирования JVM является Java Flight Recorder (JFR):
https://docs.oracle.com/en/java/java-components/jdk-mission-control/9/user-guide/using-jdk-flight-recorder.html#GUID-D38849B6-61C7-4ED6-A395-EA4BC32A9FD6
https://dev.java/learn/jvm/jfr/
JFR очень гибкий и настраиваемый, собирает много событий JVM. Можно без проблем строить flame-графы, если есть парсер JFR.
Если JVM рассматривают просто как процесс, то используют async prifiler - https://github.com/async-profiler/async-profiler.
Однако JFR нативно поддерживется начиная с Java 11 и его использование приоритетное.
Аналогичный продукт у Grafana - Pyroscope, для непрерывного профилирования JVM-приложений использует JFR -
https://grafana.com/docs/pyroscope/latest/configure-client/language-sdks/java/
perforator на C++ написан, если я правильно понимаю. Я мог бы законтрибьютить использование JFR, если бы можно было это реализовать на Java или Go, C++ на таком уровне не владею к сожалению.
Beta Was this translation helpful? Give feedback.
All reactions