- 适用于 JDK 24 的 GraalVM(最新)
- 适用于 JDK 25 的 GraalVM(早期访问)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发构建
Native Image 中对 Linux Perf 性能分析器的支持
perf
性能分析器是 Linux 中的一款性能分析工具,可用于收集和分析各种性能相关数据,例如 CPU 利用率、内存使用情况等。它对于分析和理解应用程序的行为特别有用。
安装 #
Perf 是一款用于 Linux 系统的性能分析工具。大多数发行版都预装了 perf
,但如果未预装,您可以使用包管理器进行安装。
要在 Oracle Linux/Red Hat/CentOS 上安装 perf
,请运行此命令
sudo yum install perf
要在 Debian/Ubuntu 上安装 perf
,请逐一运行以下命令
sudo apt update
sudo apt install linux-tools-common linux-tools-generic
安装 perf
后,备份以下选项的默认值
cat /proc/sys/kernel/perf_event_paranoid > perf_event_paranoid.backup
cat /proc/sys/kernel/kptr_restrict > kptr_restrict.backup
然后将它们设置为新的所需值
echo -1 > /proc/sys/kernel/perf_event_paranoid
echo 0 > /proc/sys/kernel/kptr_restrict
在上述示例中,使用 -1
和 0
作为值,这是限制最少的,因此不建议在生产代码中使用。您可以根据需要自定义这些值。
perf_event_paranoid 有四种不同的级别(值)
- -1:允许所有用户使用(几乎)所有事件。
- >=0:禁止没有
CAP_SYS_ADMIN
权限的用户使用ftrace
函数跟踪点。 - >=1:禁止没有
CAP_SYS_ADMIN
权限的用户访问 CPU 事件。 - >=2:禁止没有
CAP_SYS_ADMIN
权限的用户进行内核分析。
kptr_restrict 有三种不同的级别(值)
- 0:所有用户均可读取内核指针。
- 1:内核指针仅对特权用户(具有
CAP_SYS_ADMIN
功能的用户)可访问。 - 2:内核指针对所有用户隐藏。
使用完 perf
后,恢复原始值
cat perf_event_paranoid.backup > /proc/sys/kernel/perf_event_paranoid
cat kptr_restrict.backup > /proc/sys/kernel/kptr_restrict
构建原生可执行文件 #
以下命令假定 native-image
已在系统路径中并可用。如果未安装,请参考“入门”指南。
native-image -g <entry_class>
-g
选项指示 Native Image 为生成的二进制文件生成调试信息。例如,perf
可以利用此调试信息在跟踪中为类型和方法提供正确的名称。
基本操作 #
CPU 性能分析 #
-
列出所有可用事件
perf list
此命令显示可用于性能分析的所有可用事件列表。
-
记录 CPU 事件
perf record -e <event> -o perf.data <your_executable>
将
<event>
替换为列表中所需的事件。此命令分析您的可执行文件并将数据保存到名为 perf.data 的文件中。 -
生成报告
perf report
此命令根据收集的数据生成报告。您可以使用各种选项来自定义输出。
内存性能分析 #
-
记录内存事件
perf record -e memory:<event> -o perf.data <your_executable>
将
<event>
替换为特定的内存事件。此命令分析内存相关事件。 -
生成内存报告
perf report --sort=dso
此命令生成一份专注于内存相关事件的报告,按动态共享对象 (DSO) 排序。
跟踪 #
-
记录系统范围的跟踪
sudo perf record -a -g -o perf.data
此命令记录系统范围的跟踪(包括调用图信息),并将数据保存到名为 perf.data 的文件中。系统范围跟踪请使用 sudo。
-
生成跟踪报告
perf script
此命令生成一个可用于分析记录的跟踪数据的脚本。