性能动态跟踪未能添加事件

时间:2019-05-29 14:52:34

标签: java linux jvm perf

我正在尝试学习如何在运行一些用C编写的基于JNI的共享库的Java应用程序上使用perf动态跟踪。该库通过路径/opt/myapp/lib/libmyapp.so安装,然后与选项{{ 1}}。所以我运行以下命令:

-Djava.library.path=/opt/myapp/lib/

,没有有关错误原因的任何提示。如果库中没有使用这种名称的全局函数,我将得到相应的错误描述:

root@mypc:~# perf probe -x /opt/myapp/lib/libmyapp.so --add Java_net_my_app_pollEvents0
    Error: Failed to add events.

任何人都可以提示如何解决此问题吗?我试图为root@mypc:~# perf probe -x /opt/myapp/lib/libmyapp.so --add Java_net_my_app_pollEvents1234567 Probe point 'Java_net_my_app_pollEvents1234567' not found. Error: Failed to add events. 函数添加一个探针,它工作得很好:

malloc

1 个答案:

答案 0 :(得分:2)

在我的例子中,“参数列表太长”错误是因为我将一个很长的 C++ 符号名称传递给 perf probe;使用 EVENT= 语法显式命名探测点可以成功添加探测点:

$ sudo perf probe -x myelf --no-demangle --add myalias=_SomeVeryLongMangledNameWhee
$ sudo perf record -e 'probe_myelf:myalias' -a -- sleep 30