Hey,

just a heads-up that I have spent some time on moving the work related
to bringing async-profiler to Cassandra to more production-ready state
after I have continued to work on the original code of Yaman and
Bernardo who resolved the comments.

For anybody interested here is the branch

https://github.com/apache/cassandra/pull/4487

and here is the usage:

https://github.com/apache/cassandra/pull/4487/files#diff-374bb067d80842cd2ebd903b290ef247c0e66ee6ad8235eeb0c567ff6af28431

It would be great to gather more feedback on UX here, currently it is
possible to (via nodetool profile)

start / stop profiling
list - gets list of resulting profile files on a node
purge - remove results
fetch - transfer results from node to local machine

The reason for this design is that nodetool does not necessarily have
to be executed on the same machine Cassandra runs at. That means that
if we profile Cassandra remotely (calling respective MBean), then
results (flamegraphs as html etc) would be stored on that node as
well, but then a user does not necessarily have the access to that
disk to actually see the results.

Also, as any other new feature, the profiling capability is disabled
by default (albeit it can be enabled in runtime if one wants, via JMX
method only).

One interesting feature to add is to be able to convert JFR (Java
Flight Recorder) files async-profiler is producing to an output which
also shows "heatmaps". This is a little bit more involved and not sure
if that has to be the part of the initial implementation but it would
be super cool if we can profile out of the box and have heatmaps
automatically too.

I am personally stoked about this async-profiler in Cassandra a lot.
The experience in e.g. IDEA is also great as there is a very nice
plugin to visualise JFR files so one can just look at them in IDEA, or
we can just export into HTML etc ...

Do you have any ideas / insights about what was done so far? I think
this is a great way to shape the solution for now. Sidecar integration
will be easy as well as that will just call related MBean methods.

Regards



On Thu, Jul 17, 2025 at 6:02 PM Doug Rohrer <[email protected]> wrote:
>
> We could build this as part of the existing work - just make the endpoint 
> take an option to allow the user to pick which one gets profiled? Or at least 
> have the API capable of it for the first iteration and then add support for 
> sidecar after the C* side is done?
>
> Doug
>
> > On Jul 16, 2025, at 6:27 PM, Francisco Guerrero <[email protected]> wrote:
> >
> >> Do we want to create a new JIRA ticket to have the async profiler
> >> integration in Sidecar?
> >
> > Yes, +1 for this. I think it makes sense to also have async profiling 
> > capability in Sidecar itself
> >
> > On 2025/07/16 22:22:17 Yifan Cai wrote:
> >> Late to the party.
> >>
> >> Sidecar is a JVM process that would benefit from async profiling too.
> >>
> >> Do we want to create a new JIRA ticket to have the async profiler
> >> integration in Sidecar?
> >>
> >> - Yifan
> >>
> >> On Wed, Jul 16, 2025 at 3:17 PM Yaman Ziadeh (BLOOMBERG/ 919 3RD A) <
> >> [email protected]> wrote:
> >>
> >>> Hi all, I've opened a draft PR for the C* async-profiler feature here
> >>> https://github.com/apache/cassandra/pull/4255 with some initial basic
> >>> implementation - The PR is currently incomplete, but thought I'd open it 
> >>> to
> >>> get any feedback and pointers along the way!
> >>>
> >>
>

Reply via email to