从 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
我可以使用 JVisualVM从我的本地机器连接到 JVM,它使用 2 步过程 -
- 提示通过默认端口 1099 上的 jstatd 连接添加远程计算机 ->我能够这样做并且服务器被添加,证明 RMI 注册表可用
- 添加服务器后,您可以在暴露的端口上添加到 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] 部分以进行连接