How to get Java profiling dump for creating flame graphs on the mac?

前端 未结 4 1486
一个人的身影
一个人的身影 2021-02-04 15:45

I\'d like to collect stacktraces from my Java app for creating CPU Flame Graphs for profiling.

This is very similar to this question: How to get complete stack dump from

4条回答
  •  谎友^
    谎友^ (楼主)
    2021-02-04 16:24

    Good news, the FlameGraph repository has "a script" to work with jstacks already in it.

    https://github.com/brendangregg/FlameGraph

    It's the stackcollapse-jstack.pl.

    It seems that by default it expects just stack trace after stack trace in its input, and counts each one as "a sample point."

    So you can just do multiple jstack's into a file (run this once or a few times, or once a second "for awhile" etc.):

    jstack pid_of_your_jvm >> my_jstack

    Then execute that script:

     ./stackcollapse-jstack.pl my_jstack > my_jstack.folded
    

    and finally convert to flamegraph:

     ./flamegraph.pl --color=java my_jstack.folded > my_jstack.svg
    

    No third party helpers required (though they may still be useful).

    Note also that the stackcollapse-jstack.pl file discards non RUNNABLE threads, you may want to tweak that if you want to also include "idle" threads (typically you don't).

    Apparently you could use the linux "perf" command to generate stacks for a java process, as well, see the README https://github.com/brendangregg/FlameGraph

    This might include more native calls, for instance.

提交回复
热议问题