用于分析的命令行可执行文件


JProfiler包含许多命令行工具,用于设置分析代理和从命令行控制分析操作。

将分析代理加载到正在运行的JVM中。

通过命令行实用程序bin/jpenable ,你可以将分析代理加载到任何正在运行的版本为6或更高的JVM中。 通过命令行参数,你可以自动执行该过程,从而无需用户输入。支持的参数有:

用法: jpenable [options]

jpenable 在一个选定的本地 JVM 中启动分析代理, 这样你可以
从不同的计算机上连接。 如果 JProfiler GUI 在本地运行
则可以直接从 JProfiler GUI 去 Attach ,而无需运行该可执行命令。

* 如果未提供参数, jpenable 将尝试发现尚未被分析的本地 JVM
  并在命令行要求所有必要的
  输入。
* 使用以下参数你可以在命令行提供全部或部分
  用户输入:

  -d  --pid=<PID>     应该被分析的 JVM 的 PID
  -n  --noinput       在任何情况下都不要求用户输入。
  -h  --help          显示这些帮助信息。
      --options=<OPT> 传递给代理的调试选项。

  GUI 模式: (默认)
  -g  --gui           JProfiler GUI 将被用于 Attach 到 JVM
  -p  --port=<nnnnn>  分析代理的监听端口,用于监听来自 JProfiler GUI 的
                      连接。

  离线模式:
  -o  --offline       JVM 将被以离线模式分析。
  -c  --config=<PATH> 分析设置的配置文件路径。
  -i  --id=<ID>       配置文件中的会话 ID。 如果配置文件中只有一个
                      会话,该选项不是必须的。

运行 JVM 的用户必须与运行 jpenable 的用户是同一个, 否则
JProfiler 将无法连接。
一个例外是运行在本地系统账号下的 Windows 服务,如果你
使用 jpenable 交互的方式列出它们。

保存HPROF快照

如果你只需要一个堆快照,可以考虑使用bin/jpdump命令行工具, 它可以保存HPROF快照,而无需将分析代理加载到VM:

用法: jpdump [options]

jpdump 将本地运行的 JVM 中的 HPROF 堆转储保存到一个文件中。
然后可以在 JProfiler GUI 中打开该 HPROF 文件。

* 如果没有提供参数,jpdump 将列出本地所有运行的 JVM。
* 通过以下参数你可以在命令行中提供部分或全部
  用户输入:

  -p  --pid=<PID>    指定要做堆转储的 JVM
                     的 PID, 不会再被问及其他问题
  -a  --all          保存所有对象。 如果未指定则只有活动对象会被
                     转储
  -f  --file=<PATH>  转储文件路径。如果未指定,转储文件会被存储在
                     当前路径下,名为 <VM名>.hprof
                     如果文件已经存在,会追加一个数字。
  -h  --help         显示这些帮助信息。

注意,JVM 必须使用和 jpdump 相同的用户身份运行, 否则
JProfiler 无法连接。
一个例外是运行在本地系统账号下的 Windows 服务将,如果你
使用 jpdump 交互的方式列出它们。

这比加载分析代理和保存JProfiler堆快照的开销要小。此外,由于分析代理永远不能被卸载,所以这种方法适合于在生产中运行的JVM。

控制分析代理

当你在没有参数的情况下启动bin/jpcontroller 可执行文件时, 它将尝试连接到本地机器上的被分析 JVM。如果发现了多个被分析 JVM,你可以从列表中选择一个。 因为发现机制使用Oracle JVM的Attach API,所以这只对Java 6以上的Oracle JVM有效。

jpcontroller 只能连接到已经设置了分析设置的 JVM, 所以对于使用-agentpath VM 参数"nowait"选项启动的 JVM,它将无法工作。 选择集成向导的"启动模式"屏幕上的立即启动,稍后用JProfiler GUI连接单选按钮, 并且还没有JProfiler GUI连接到代理,会设置该选项。使用jpenable 不使用--offline 参数,也需要来自JProfiler GUI的连接,然后jpcontroller 才能连接到分析进程。

如果你想连接到远程计算机上的进程,或者如果JVM不是版本为6或更高的HotSpot JVM, 你必须将VM参数-Djprofiler.jmxServerPort=[port] 传递给分析的JVM。 MBean服务器将在该端口上发布,你可以指定所选端口作为jpcontroller 的参数。 通过附加的VM参数-Djprofiler.jmxPasswordFile=[file] ,你可以指定一个带有键值对的属性文件, 其形式为user=password ,以设置验证。请注意, 这些 VM 参数会被com.sun.management.jmxremote.port VM 参数所覆盖。

通过对JMX服务器的显式设置,你可以使用命令行控制器通过调用jpcontroller 主机:端口 连接到远程服务器。如果远程计算机只能通过IP地址连接,你必须将-Djava.rmi.server.hostname=[IP地址] 作为VM参数添加到远程VM中。

默认情况下,jpcontroller 是一个交互式的命令行实用程序,但你也可以使用它自动进行分析会话, 而无需手动输入。自动调用将通过[pid | host:port] 来选择被分析JVM 以及--non-interactive参数。此外,还将从标准输入或--command-file 参数指定的命令文件中读取命令列表。每个命令都从新的行开始,空白或以"#"注释字符开始的行将被忽略。

这种非交互模式的命令与JProfiler MBean中的方法名相同, 它们需要相同数量的参数,用空格隔开。字符串如果包含空格,必须用双引号。此外,还提供了一个sleep <秒> 命令,可以暂停几秒。 这允许你开始记录,等待一段时间,然后将快照保存到磁盘。

jpcontroller支持的参数如下所示:

用法: jpcontroller [options] [host:port | pid]

* 如果没有提供任何参数, jpcontroller 将尝试发现
   正在被分析的本地 JVM
* 如果指定了一个数字, 则 jpcontroller 将尝试连接到
   进程 ID 为 [pid] 的 JVM。 如果该 JVM 未被分析, jpcontroller 将无法
   连接。 在这种情况下, 首先使用 jpenable 实用程序。
* 除此之外, jpcontroller 将连接到 "主机:端口", 端口已经
   在被分析 JVM 的 VM 参数 -Djprofiler.jmxServerPort=[端口]
   中指定过。

可以使用以下参数选项(options):
  -n --non-interactive      运行一个从标准输入(stdin)
                            读取命令列表的自动会话
  -f --command-file=<PATH>  从一个文件而不是标准输入(stdin)读取命令,仅适用于和
                            --non-interactive 一块使用。

非交互命令的语法:
  请参见 RemoteControllerMBean (https://bit.ly/2DimDN5) 的 javadoc
  操作列表。 各参数以空格分割,如果某个参数含有空格
  必须使用引号引起来。 例如:

    addBookmark "Hello world"
    startCPURecording true
    sleep 10
    stopCPURecording
    saveSnapshot /path/to/snapshot.jps

  sleep <秒> 命令暂停指定的秒数。
  空行和以 # 开头的行将被忽略。