在分析代理可以开始任何记录之前,必须先设置配置文件设置。这在您使用 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。 -
过滤器
profile、compact和ignore接受以冒号分隔的包名或类名列表。包名应以点结尾。如果未指定过滤器选项,则使用默认过滤器。 -
行号
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>指定代理在开始记录之前应等待的时长。
时间值为非负整数,可选地后跟 s、m 或 h。支持的记录值有
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。选择探针记录也会记录 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 文件。



