Я пытаюсь научиться использовать динамическую трассировку perf в моем java-приложении, в котором запущена некоторая общая библиотека на основе JNI, написанная на C. Библиотека устанавливается по пути /opt/myapp/lib/libmyapp.so
, а затем запускается с параметром -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
, и она работает просто отлично:
root@mypc:~# perf probe -x /lib/x86_64-linux-gnu/libc-2.27.so --add malloc
Added new event:
probe_libc:malloc (on malloc in /lib/x86_64-linux-gnu/libc-2.27.so)
You can now use it in all perf tools, such as:
perf record -e probe_libc:malloc -aR sleep 1