无法使用 JStat 连接到远程 JVM

Unable to Connect to a Remote JVM using JStat

从 Jstat Documentation ,jstat 可以连接到本地和远程 JVM。 URI 可以形成为

 [protocol:][//]lvmid[@hostname[:port]/servername]

我在其中一台启用了 JMX 的服务器 (CentOS) 上有一个 JVM 运行 -

xyz   23878     1  0 Jun01 ?        04:37:00 java -Xms1g -Xmx1g -XX:NewSize=512m -Xloggc:../9301/logs/gc.log -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../9301/logs/oom.log **-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=19301 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false** -jar ../0.1.14/xyz-0.1.14.jar -serviceName <name> -dataCenter <name> servicePort 9301

我能够连接到 JVM,从我的本地计算机,使用使用两步过程的 JVisualVM -

  1. 提示通过默认端口 1099 上的 jstatd 连接添加远程机器 -> 我能够这样做并且服务器被添加证明 RMI 注册表可用
  2. 添加服务器后,您可以在暴露的端口上添加到 JVM 的 JMX 连接 -> 成功,因为我的程序在端口 19301 上暴露了 JMX,我可以查看详细信息

但是,我无法将 jstat 用于相同的目的。

运行 jstat -gc process_id@servername 给我下面的异常 -

RMI Registry not available at <servername>:1099
Connection refused to host: <servername>; nested exception is: 
    java.net.ConnectException: Connection refused

通过网络检查了各种来源,他们谈论拥有 jstatd 运行 我认为是 运行 因为 VisualVM 能够添加机器。

问题:jstat命令中的[vmid]部分应该如何框起来连接

您需要在远程主机上 运行 jstatd 才能使用 jstat

拥有 RMI 注册表 运行ning 是不够的。注册表仅用于注册 各种RMI 服务。 -Dcom.sun.management.jmxremote 选项启动 jmxrmi 服务(适用于 VisualVM),但 jstat 查找 JStatRemoteHost 服务。

启动 jstatd 后,使用 jstat -options process_id@servername 命令监控远程虚拟机。