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.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Привет.
Удивило решение для профилирования 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