【问题标题】:How to trace a java process with eBPF (BCC)如何使用 eBPF (BCC) 跟踪 Java 进程
【发布时间】:2021-04-27 07:50:14
【问题描述】:

想用eBPF中的Uprobe来跟踪自己写的Java程序,但是不知道如何找到Java程序对应的符号表。在C语言中,编译后会生成平台相关的可执行文件,通过可执行文件可以得到方法对应的地址。但是Java是解释型语言,没有可执行文件,而eBPF是Linux工具,不知道Java语言相关信息。我知道JVM中的方法可以使用USDT进行跟踪,例如method__entry,但是没有提供有关方法参数的信息,所以有没有办法跟踪Java函数使用 eBPF? BCC,using USDT to print a method flow graph in high-level languages.

【问题讨论】:

    标签: ebpf bcc-bpf


    【解决方案1】:

    不是Java跟踪专家,但我认为你需要看看perf-map-agent

    这是 Brendan Greggs 在他的帖子 on perfCPU flame graphs 中提到的,我相信它适用于 eBPF 和 perf。 This post 提供了一个示例,说明如何从容器中调用该工具,以使用 BCC 工具生成火焰图。

    【讨论】:

    • 我读过这篇文章,但是 perf-map-agent 使用 JIT 编译方法(这是经常被调用的代码)。如果我在java进程中编写了一个compute方法,并且我想跟踪该方法的开始和结束,可能该方法只执行一次,那么该方法将不会被JIT编译,并且不会在该方法中找到计算方法生成 /tmp/perf-.map 文件。我尝试使用 -XX: compileThreshold =1 来降低 JIT 编译限制,但它不起作用,我仍然无法在映射文件中找到计算符号.
    • 对不起,我知道的关于跟踪 Java 的信息就这么多:/。
    猜你喜欢
    • 2020-04-24
    • 2020-03-28
    • 1970-01-01
    • 2021-03-04
    • 2022-11-20
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多