Я пытаюсь сгенерировать Flame Graph для Java-программы, используя perf-map-agent .Я знаю, что вы можете использовать perf-java-record-stack
для записи данных для запущенного процесса.Я также узнал, что вы можете использовать скрипт jmaps
в каталоге Flame Graph.Я нашел пример Брендана Грегга , а также пост переполнения стека , иллюстрирующий это.Однако ни в одном из этих примеров процесс Java не задан в качестве аргумента для perf record
(что означает, что perf собирает трассировки стека для всей системы).
Я хочу записать данные профилирования для всего выполненияпрограмма (и желательно ничего другого).Есть какой-либо способ сделать это?Я пробовал:
perf record -a -g java -XX:+PreserveFramePointer <other JVM arguments> <my java program>; sudo ~/bin/brendangregg/FlameGraph/jmaps
, который отвечает:
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 1.711 MB perf.data (3449 samples) ]
Fetching maps for all java processes...
Mapping PID 2213 (user malin):
wc(1): 2970 9676 156108 /tmp/perf-2213.map
всегда с одинаковым PID.Этот PID является запущенным процессом, а не тем, для которого я пытался записать данные.