Infelizmente, nem tudo são flores e, para algumas linguagens, temos limitações. Por exemplo, descobri o motivo da lentidão ao utilizar o bpftrace em aplicações Java. Para linguagens dinâmicas, os probes precisam ser criados também dinamicamente. Para a JVM, isso atualmente envolve usar a opção -XX:+ExtendedDTraceProbes para permitir a criação de USDT. No entanto, isso tem um impacto significativo para aplicações Java (o que não se observa em outras linguagens).
A melhor solução seria otimizar a criação desses probes, sem incorrer em custo tão elevado quanto visto na JVM atualmente com a opção -XX:+ExtendedDTraceProbes.
Utilizando a biblioteca libstapsdt ou libusdt isso seria possível. Até existe um projeto que buscou fazer isso para a JVM (https://github.com/goldshtn/libstapsdt-jni), mas ainda é uma prova de conceito. De toda forma, é interessante observar que o autor do libstapsdt é brasileiro e talvez seja mais simples conversar com ele a respeito disso.
Considerando o nível de detalhe que precisamos, talvez algo na linha do FlameGraphs seja suficiente (mas não sei se ele é mais rápido ou como ele contorno o problema dos pontos de prova dinamicamente definidos da JVM).