用于分析的命令行可执行文件
JProfiler 包含许多命令行工具,用于设置分析代理和从命令行控制分析操作。
将分析代理加载到正在运行的 JVM 中
使用命令行工具 ,您可以将分析代理加载到任何版本为 6 或更高的正在运行的 JVM
中。通过命令行参数,您可以自动化该过程,使其无需用户输入。支持的参数有:
bin/jpenable
用法: jpenable [选项] jpenable 在选定的本地 JVM 中启动分析代理,以便您可以从不同的计算机连接 到它。如果 JProfiler GUI 在本地运行,您可以直接从 JProfiler GUI 附加,而无需运行此可执行文件。 * 如果没有给出参数,jpenable 会尝试发现尚未被分析的本地 JVM,并在命令行上 请求所有必需的输入。 * 使用以下参数,您可以在命令行上部分或完全提供整个用户输入: -d --pid=<PID> 应该被分析的 JVM 的 PID -n --noinput 在任何情况下都不要求用户输入 -h --help 显示此帮助 --options=<OPT> 传递给代理的调试选项 GUI 模式: (默认) -g --gui 将使用 JProfiler GUI 附加到 JVM -p --port=<nnnnn> 分析代理应监听 JProfiler GUI 连接的端口 -a --address=<IP> 分析代理应监听的地址。没有此参数,附加仅可能从 localhost。使用 0.0.0.0 监听所有地址 离线模式: -o --offline JVM 将在离线模式下被分析 -c --config=<PATH> 配置文件的路径,其中包含分析设置 -i --id=<ID> 配置文件中的会话 ID。如果配置文件仅包含一个会话,则不需要。 请注意,JVM 必须以与 jpenable 相同的用户身份运行,否则 JProfiler 无法连接到它。 一个例外是 Windows 服务将运行在本地系统账号下,如果你 与 jpenable 交互的方式列出它们。
保存 HPROF 快照
如果您只需要堆快照,可以考虑使用 命令行工具,该工具可以在不将分析代理加载到 VM 中的情况下保存 bin/jpdumpHPROF 快照:
用法: jpdump [options] jpdump 将一个本地运行JVM中的堆,转储到一个文件。 Hotspot 虚拟机生成HPROF文件, OpenJ9 虚拟机生成PHD文件。 然后HPROF 和 PHD 文件可以在JProfiler GUI中打开。 * 如果没有提供参数,jpdump 将列出所有本地运行的 JVM。 * 你可以提供以下部分或全部参数 用户在命令行输入: -p --pid=<PID> 指定要做堆转储的 JVM 的 PID, 不会再被问及其他问题 -a --all 保存所有对象。如果未指定,则只有活性对象会被 转储 -f --file=<PATH> 转储文件路径。如果未指定,转储文件 <VM name>.hprof 会被写到当前路径下。 如果文件已经存在,会追加一个数字。 -h --help 显示该帮助信息 注意,运行JVM的用户必须和运行jpdump的用户相同,否则 JProfiler 无法连接JVM。 一个例外是 Windows 服务将运行在本地系统账号下,如果你 与 jpdump 交互的方式列出它们。
这比加载分析代理并保存 JProfiler 堆快照的开销更低。此外,由于分析代理永远无法卸载,因此此方法适用于在生产中运行的 JVM。
控制分析代理
当您在没有参数的情况下启动 可执行文件时,它会尝试连接到本地机器上的被分析 JVM。如果发现多个被分析的 JVM,您可以从列表中选择一个。
bin/jpcontroller
只能连接到已设置分析设置的 JVM,因此如果 JVM 是使用 jpcontroller
-agentpath
VM 参数的 "nowait"
选项启动的,它将无法工作。该选项是在集成向导的 "启动模式" 屏幕上选择 立即启动,稍后使用 JProfiler GUI 连接 单选按钮时设置的,并且尚未有 JProfiler GUI 连接到代理。使用
而不带 jpenable
--offline
参数也需要 JProfiler GUI 的连接,才能让
连接到被分析的进程。
jpcontroller
如果您想连接到远程计算机上的进程,或者 JVM 不是版本为 6 或更高的 HotSpot JVM,您必须将 VM 参数 -Djprofiler.jmxServerPort=[port]
传递给被分析的 JVM。MBean 服务器将在该端口上发布,您可以将选择的端口作为参数传递给 。使用附加的 VM 参数
jpcontroller
-Djprofiler.jmxPasswordFile=[file]
,您可以指定一个包含键值对形式的属性文件 user password
来设置身份验证(用空格或制表符分隔)。注意,这些 VM 参数会被 com.sun.management.jmxremote.port
VM 参数覆盖。
通过显式设置 JMX 服务器,您可以使用命令行控制器通过调用 连接到远程服务器。如果远程计算机只能通过 IP 地址访问,您必须将
jpcontroller host:port
-Djava.rmi.server.hostname=[IP address]
作为 VM 参数添加到远程 VM。
默认情况下, 是一个交互式命令行工具,但您也可以使用它自动化分析会话,而无需手动输入。自动调用将传递 jpcontroller
[pid | host:port]
以选择被分析的 JVM 以及 --non-interactive
参数。此外,还会从 stdin 或通过 --command-file
参数指定的命令文件中读取命令列表。每个命令都从新行开始,空行或以 "#" 注释字符开头的行将被忽略。
此非交互模式的命令与 JProfiler MBean
中的方法名称相同。它们需要相同数量的参数,用空格分隔。如果字符串包含空格,则必须用双引号括起来。此外,还提供了一个 sleep <seconds>
命令,用于暂停指定的秒数。这允许您开始记录,等待一段时间,然后将快照保存到磁盘。
请注意,分析设置必须在分析代理中设置。这会在您使用 JProfiler UI 连接时发生。如果您从未使用 JProfiler UI 连接,则必须在启动命令中手动设置它们或使用 jpenable,请参阅 有关在启动时设置分析设置的帮助主题 以获取更多信息。
jpcontroller 的支持参数如下所示:
用法: jpcontroller [options] [host:port | pid] * 如果没有提供任何参数, jpcontroller 将尝试发现 正在被分析的本地 JVM * 如果指定了一个数字, 则 jpcontroller 将尝试连接到 进程 ID 为 [pid] 的 JVM。 如果该 JVM 未被分析, jpcontroller 将无法 连接。 在这种情况下, 首先使用 jpenable 实用程序。 * 除此之外, jpcontroller 将连接到 "host:port", port 已经 在被分析 JVM 的 VM 参数 -Djprofiler.jmxServerPort=[port] 中指定过。 可以使用以下参数选项(options): -n --non-interactive 运行一个从标准输入(stdin) 读取命令列表的自动会话 -f --command-file=<PATH> 从一个文件而不是标准输入(stdin)读取命令, 仅当和 --non-interactive 一块使用。 非交互命令的语法: 请参见 RemoteControllerMBean (https://bit.ly/2DimDN5) 的 javadoc 操作列表。 各参数以空格分割,如果某个参数含有空格 必须使用引号引起来。 例如: addBookmark "Hello world" startCPURecording true startProbeRecording builtin.JdbcProbe true true sleep 10 stopCPURecording stopProbeRecording builtin.JdbcProbe saveSnapshot /path/to/snapshot.jps sleep <seconds> 命令暂停指定的秒数。 空行和以 # 开头的行将被忽略。