2017-03-22 50 views
0

我想为我的应用程序收集一些性能分析数据,然后运行perf工具和Flame Graphs。Ubuntu 16.04 LTS - 如何启用perf工具的符号

我指在此SlideShare上提供的说明:https://www.slideshare.net/brendangregg/java-performance-analysis-on-linux-with-flame-graphs

下面是我运行命令:

1. sudo perf record -F 997 -a -g 
2. sudo perf script > out.stacks01 

当运行所述第二命令时,它显示以下消息:

Failed to open /tmp/perf-9931.map, continuing without symbols. 
no symbols found in <some path>, maybe install a debug package? 

我做了一些在线浏览,并尝试安装调试包,如在此提到的:https://gist.github.com/NLKNguyen/2fd920e2a50fd4b9701f

然而,当我运行“sudo易于得到更新”,它最终失败说“无法抓取......”

可能有人弄清楚是怎么回事?我需要做什么才能正确安装调试符号包?

编辑: 我的关键问题是我生成的火焰图没有Java符号,因此我最终关注了上面的错误/消息。以下接受的答案为我原来的帖子提供了一个非常好的解释。不过,我可以通过运行jmaps来解决我的问题,如下图所示:

sudo perf record -F 997 -a -g -- sleep 300; jmaps 

这上面共享幻灯片共享链接指令进行了说明。

+0

*“也许安装调试软件包?”* – Jakuje

+0

是的,这就是它所说的,我不知道如何可以正确安装它。 – pree

+0

http://manpages.ubuntu.com/manpages/precise/en/man1/debuginfo-install.1.html – Jakuje

回答

2

Failed to open /tmp/perf-9931.map消息不是关于不正确的debuginfo - 它是关于通过JIT生成的分析代码(并且Java通常从带有JIT的类文件生成机器代码),当时没有与perf profiling代理运行兼容。

http://www.brendangregg.com/perf.html#JIT_Symbols有推荐“Java可以做到这一点与穿孔 - 地图 - 代理”使用https://github.com/jvm-profiling-tools/perf-map-agent这将产生PERF的地图文件:

架构

Linux的PERF工具将期望符号代码从/tmp/perf-.map的未知 内存区域执行。这允许 即时生成代码的运行时提供动态符号映射,以便与工具套件一起使用 。

perf-map-agent是将为Java应用程序生成此类映射文件的代理程序。它由写入C的Java代理和一个小型的自举应用程序组成,该应用程序将代理程序附加到运行中的Java进程中。

当代理连接时,它会指示JVM在运行时为各种目的报告由JVM生成的代码块 。重要的是,这包括JIT编译的方法,但也包括各种动态生成的基础结构部分,如动态创建的解释器,适配器和用于虚拟调度 (请参阅vtable和itable条目)的跳转表。代理创建一个 /tmp/perf-。它用一行代码blob 填充一个映射文件,该映射文件将内存位置映射到代码blob名称。

Java应用程序将Java进程的PID作为参数 ,并将任意数量的附加参数传递给代理的 。然后它附加到目标进程并指示它加载代理库 。

而且在https://www.slideshare.net/brendangregg/java-performance-analysis-on-linux-with-flame-graphs格雷格使用的OpenJDK的特殊砍死构建 - 滑36 - “-XX:+PreserveFramePointer•我砍死了OpenJDK x86_64的支持帧指针”。

而从台41格雷格谈论/tmp/perf-*.map文件:

定影符号

•对于这些JIT过的代码,Linux的PERF已经寻找外部提供的符号文件:/ tmp目录/穿孔 - PID .MAP,并警告说,如果不存在 •这个文件可以通过Java代理

# perf script 
Failed to open /tmp/perf-8131.map, continuing without symbols 

创建它(也请参阅lkml for“perf:添加对分析代码的支持” - https://lwn.net/Articles/633846/和其他)

相关问题