Я ищу профилировщик кода Java, который я могу использовать для профилирования моего приложения (его службы, которая работает в бэкэнде) при производстве (значит, это означает, что он слишком мал, и он не должен замедлять мое приложение). Прежде всего, я хочу обработать дерево профилей, то есть, если() вызывает b(), а затем b() вызывает c(), то сколько времени выполняли a() b() и c(), включительно и исключительно.
Увидели jvisualvm
и jprofiler
, но это не то, что я ищу, потому что я не могу связать свое производственное приложение с ними, поскольку это вызовет серьезную проблему с производительностью.
Кроме того, я прошел через metrics
(https://github.com/dropwizard/metrics), но он не дает мне возможности профилировать вызывающее дерево.
Callgrind
(http://valgrind.org/docs/manual/cl-manual.html) библиотека типов - это то, что мне нужно, поскольку она предоставляет функции профилирования дерева вызовов и дополнительные параметры, такие как избегание вызова циклов (рекурсия). Но я не уверен, что Callgrind может использоваться на производстве, поскольку он сбрасывает данные, когда программа завершается.
Может ли кто-нибудь предложить хороший профилировщик дерева древа для java, который можно использовать для производства без ущерба для производительности?