Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Ubuntu 16.04 LTS-如何为perf工具启用符号_Java_Profiling_Ubuntu 16.04_Perf - Fatal编程技术网

Java Ubuntu 16.04 LTS-如何为perf工具启用符号

Java Ubuntu 16.04 LTS-如何为perf工具启用符号,java,profiling,ubuntu-16.04,perf,Java,Profiling,Ubuntu 16.04,Perf,我正在尝试为我的应用程序收集一些分析数据,并为此运行perf工具和Flame图 我指的是本幻灯片中提供的说明: 以下是我正在运行的命令: 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 <s

我正在尝试为我的应用程序收集一些分析数据,并为此运行perf工具和Flame图

我指的是本幻灯片中提供的说明:

以下是我正在运行的命令:

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?

这在上面共享的幻灯片共享链接中的说明中有记录。

未能打开/tmp/perf-9931。map
消息不是关于错误的调试信息-它是关于JIT生成的评测代码(Java通常使用JIT从类文件生成机器代码),当与正在运行的性能分析代理不兼容时

建议使用“Java可以使用perf map agent完成此操作”,它将为perf生成映射文件:

建筑

LinuxPerf工具期望从未知位置执行代码时使用符号 位于/tmp/perf-.map的内存区域。这允许运行时 动态生成代码以提供要使用的动态符号映射 使用perf工具套件

perf map agent是一个代理,它将为生成这样的映射文件 Java应用程序。它由一个用C编写的Java代理和一个小程序组成 Java引导应用程序,将代理附加到正在运行的Java 过程

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

Java应用程序将Java进程的PID作为参数 以及它传递给 代理人然后它附加到目标进程并指示其加载 代理库

在Gregg中使用了OpenJDK的特殊黑客构建-幻灯片36-“
-XX:+PreserveFramePointer
•”  我黑了OpenJDK x86_64以支持帧指针”

在幻灯片41中,格雷格谈到了
/tmp/perf-*.map
文件:

固定符号

 • 对于JIT代码,LinuxPerf已经在查找外部提供的符号文件:/tmp/perf-PID.map,并在该文件不存在时发出警告 •  该文件可以由Java代理创建

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

(另请参见lkml中的“perf:add support for profiling jitted code”“-和其他”)

“可能安装调试包?”是的,它是这么说的,我不确定如何正确安装它。“sudo apt get update”和“Failed to fetch…”表示您的linux可能太旧了(并且包被移动到其他服务器,如old-releases.ubuntu.com或archive.ubuntu.com-检查您的/etc/apt/sources.list.d)?并且
未能打开/tmp/perf-9931。map
消息不是关于debuginfo-它是关于在没有与perf profiling agent运行兼容的情况下分析JITted代码=“Java可以通过perf map agent完成此任务”-使用
perf map agent重新运行应用程序
# perf script 
Failed to open /tmp/perf-8131.map, continuing without symbols