JProfiler帮助文档

在启动时设置配置文件设置 (profiling setting)

在 Profiling Agent 开始任何记录之前,必须先完成配置文件设置 (profiling setting)。这通常在您连接 JProfiler UI 时进行。在某些情况下,要求 Profiling Agent 在启动时就获知配置文件设置 (profiling setting)。主要用例包括:

  • 离线分析 (offline profiling)
    使用触发器 (trigger) 或 API 记录数据并保存快照。JProfiler GUI 无法在此模式下连接。有关更多信息,请参见离线 profiling 的帮助主题。
  • 在无头 (headless) 机器上使用 jpcontroller 进行 profiling
    命令行工具 jpcontroller 可代替 JProfiler GUI 以交互方式或通过非交互式命令文件记录数据并保存快照。但是,jpcontroller 没有配置配置文件设置 (profiling setting) 的功能,因此必须提前进行设置。
  • 远程 attach 到较旧的 OpenJ9 和 IBM JVM
    早于 8u281、11.0.11 和 Java 17 的较旧 OpenJ9 和 IBM JVM 无法在不危及被分析 (profiled) 进程稳定性的情况下重新定义类,因此必须在启动时指定配置文件设置 (profiling setting)。JProfiler 中远程集成向导的“Profiled JVM”步骤会询问您 JVM 的类型,如果您在此处选择 Older OpenJ9 or IBM JVM,向导将添加下文讨论的选项。

通常,在启动时指定配置文件设置 (profiling setting) 是最高效的操作模式,因为需要执行的类重定义次数最少。如果不介意操作便利性有所降低,它可以用于任何类型的 profiling 会话 (session)。

在启动时设置配置文件设置 (profiling setting)

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

如果您在启动脚本中添加了 -agentpath VM 参数来加载 Profiling Agent,则可以通过在 -agentpath 参数中添加

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

来指定配置文件设置 (profiling setting)。完整的参数如下所示:

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

如果您在进程启动后使用 jpenable 加载 Profiling Agent,可以在交互式执行中选择 offline mode,并在其中指定 config 和 ID。或者,在非交互式执行中传入 --offline、--config 和 --id 参数。

无需配置文件的内联设置 (inline settings)

对于离线 profiling,如果您只需要最常用的会话 (session) 设置,则无需配置文件。相反,您可以直接在 -agentpath 参数中添加内联选项。如果通过 controller 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.

以下内联会话 (session) 设置可用:

  • 调用树 (call tree) 收集
    callTreeMode=sampling|instrumentation|async 用于选择调用树 (call tree) 收集模式。instr 可用作 instrumentation 的简写。
  • 过滤器
    profile、compact 和 ignore 接受以冒号分隔的包名或类名列表。包名应以句点结尾。如果未指定过滤器选项,则使用默认过滤器。
  • 行号
    lineNumbers=true|false 用于启用在调用树 (call tree) 中记录行号的功能。

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

内联设置还可以在无需 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 数据。线程和遥测 (telemetry) 始终会被记录。
  • 持续时间
    duration=<time> 指定在保存快照之前应记录数据多长时间。如果未指定持续时间,记录将一直持续到 JVM 终止,届时将保存快照。
  • 延迟
    delay=<time> 指定 Agent 在开始记录之前应等待多长时间。

时间值为非负整数,可选择后跟 s、m 或 h。支持的 recording 值为 cpu、allocation、jdbc、jpa、mongo_db、cassandra、http_server、http_client、jndi、jms、kafka_producer、kafka_consumer、rmi、grpc、ai、ws、class_loader、exception、socket、file、process 和 gc。选择探针 (probe) 记录也会记录 CPU 数据。

准备配置文件

被引用的配置文件可以是当前机器上 JProfiler 安装的配置文件,在这种情况下完全不需要指定 config 参数。JProfiler 配置文件位于 $HOME/.jprofiler16/jprofiler_config.xml 或 %USERPROFILE%\.jprofiler16\jprofiler_config.xml,并且是 -agentlib VM 参数的 config 选项的默认值。

通常,自动 profiling 需要在另一台机器上执行,无法引用本地的 JProfiler 配置文件。此时,您可以在本地机器上的 JProfiler UI 中准备一个包含配置文件设置 (profiling setting) 的会话 (session),通过 Session→Export Session Settings 将其导出,然后传输到运行 JProfiler 的机器上。

会话 ID (session ID) 可以在会话设置对话框的“Application Settings”选项卡右上角看到(参见下面的屏幕截图)。如果导出的文件仅包含一个会话 (session),则无需指定 id 参数。

同步配置文件

完成初始设置后,您可能希望针对将来的 profiling 运行调整配置文件设置 (profiling setting)。这需要在每次进行修改时将配置文件复制到远程机器上。

JProfiler 中的远程会话 (session) 具有“Config synchronization”功能,可以为您自动执行此过程。

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