JProfiler帮助文档

在启动时设置配置文件设置

在分析代理可以开始任何记录之前,必须先设置配置文件设置。这在您使用 JProfiler UI 连接时完成。在某些情况下,需要分析代理在启动时就知道配置文件设置。主要使用场景包括:

  • 离线分析
    使用触发器或 API 来记录数据并保存快照。JProfiler GUI 在此模式下无法连接。 请参阅离线分析帮助主题以获取更多信息。
  • 在无界面机器上使用 jpcontroller 进行分析
    命令行工具 jpcontroller 可以代替 JProfiler GUI,以交互方式或使用非交互式命令文件来记录数据和保存快照。但是,jpcontroller 没有配置配置文件设置的功能,因此必须提前设置。
  • Remote attach 到较旧的 OpenJ9 和 IBM JVM
    8u281、11.0.11 和 Java 17 之前的较旧 OpenJ9 和 IBM JVM 不具备在不危及被分析进程稳定性的情况下重新定义类的能力,因此必须在启动时设置配置文件设置。 JProfiler 中 remote 集成向导的"被分析 JVM"步骤会询问您 JVM 的类型,如果您在那里选择 Older OpenJ9 and IBM JVMs,向导将添加下面讨论的选项。

一般来说,在启动时设置配置文件设置是最高效的操作模式,因为需要执行的类重定义数量最少。如果便利性的降低不是问题,它可以用于任何类型的分析会话。

在启动时设置配置文件设置

如果您使用集成向导,请在"本地或 Remote"步骤中选择 On a remote computer 选项,然后在"Config 同步"步骤中选择 Apply configuration at startup 选项。向导随后将添加与以下段落中讨论的相同选项。

如果您已在启动脚本中添加了 -agentpath VM 参数来加载分析代理,则可以通过添加以下内容来设置配置文件设置:

,config=<path to config file>,id=<session ID>

-agentpath 参数。完整的参数如下所示:

-agentpath:/path/to/libjprofilerti.so=port=8849,nowait,config=/path/to/config,id=123

如果您使用 jpenable 在进程启动后加载分析代理,可以在交互式执行中选择 offline mode 并在那里指定 config 和 ID。或者,传递 --offline--config--id 参数用于非交互式执行。

不使用 config 文件的内联设置

对于离线分析,如果您只需要最常见的会话设置,则不需要 config 文件。您可以直接将内联选项添加到 -agentpath 参数中。这在使用控制器 API、MBean 接口或 jpcontroller 控制记录时非常有用。

-agentpath:/path/to/libjprofilerti.so=offline,callTreeMode=sampling,profile=com.mycorp.:org.example.

使用 jpenable attach 时可以提供相同的选项:

jpenable --offline --call-tree-mode=sampling --profile=com.mycorp.:org.example.

以下内联会话设置可用:

  • 调用树采集
    callTreeMode=sampling|instrumentation|async 选择调用树采集模式。可以使用快捷方式 instr 表示 instrumentation。
  • 过滤器
    profilecompactignore 接受以冒号分隔的包名或类名列表。包名应以点结尾。如果未指定过滤器选项,则使用默认过滤器。
  • 行号
    lineNumbers=true|false 启用在调用树中记录行号。

对于 jpenable,选项名称使用连字符,例如 --line-numbers--call-tree-mode--profile。对于高级会话设置(如触发器、探针特定配置和其他不常用选项),config 文件仍然可用。

内联设置还可以启动自动记录并保存快照,而无需 API 调用或 jpcontroller。此模式需要 snapshot 选项:

-agentpath:/path/to/libjprofilerti.so=offline,snapshot=/path/to/snapshot.jps,recording=cpu:allocation,duration=10m

使用 jpenable,可以通过以下方式配置相同的记录:

jpenable --offline --snapshot=/path/to/snapshot.jps --recording=cpu:allocation --duration=10m

以下自动记录选项可用:

  • 快照
    snapshot=<path> 指定将要保存的快照文件。
  • 记录的数据
    recording=<list> 指定以冒号分隔的数据类型列表。如果省略此选项,则记录 CPU 数据。线程和遥测始终会被记录。
  • 持续时间
    duration=<time> 指定在保存快照之前应记录数据的时长。如果未指定持续时间,则记录将持续到 JVM 终止,届时保存快照。
  • 延迟
    delay=<time> 指定代理在开始记录之前应等待的时长。

时间值为非负整数,可选地后跟 smh。支持的记录值有 cpuallocationjdbcjpamongo_dbcassandrahttp_serverhttp_clientjndijmskafka_producerkafka_consumerrmigrpcaiwsclass_loaderexceptionsocketfileprocessgc。选择探针记录也会记录 CPU 数据。

准备 config 文件

引用的 config 文件可以是当前机器上 JProfiler 安装的 config 文件,在这种情况下根本不必指定 config 参数。JProfiler config 文件位于 $HOME/.jprofiler16/jprofiler_config.xml%USERPROFILE%\.jprofiler16\jprofiler_config.xml,是 -agentlib VM 参数的 config 选项的默认值。

通常,自动分析应在不同的机器上执行,引用本地 JProfiler config 文件是不可能的。您可以在本地机器上的 JProfiler UI 中准备一个包含配置文件设置的会话,通过 Session→Export Session Settings 导出它,然后将其传输到运行 JProfiler 的机器上。

会话 ID 可以在会话设置对话框的"Application settings"选项卡右上角看到(见下方截图)。如果导出的文件只包含一个会话,则不必指定 id 参数。

同步 config 文件

完成初始设置后,您可能希望为将来的分析运行调整配置文件设置。这需要每次进行修改时将 config 文件复制到 remote 机器。

JProfiler 中的 remote 会话具有"Config 同步"功能,可以为您自动化此过程。

如果会话通过 SSH 启动,您可以直接通过 SSH 将 config 文件复制到 remote 机器。否则,您仍然可以将 config 文件复制到可能挂载在 remote 机器上的本地目录。最后,您可以执行任意命令通过其他方式复制 config 文件。