无法使用JStat

时间:2017-06-22 04:38:29

标签: memory-management jvm heap jvm-hotspot 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

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

  1. 提示在默认端口1099上通过jstatd连接添加远程计算机 - &gt; 我能够这样做并且服务器被添加证明RMI Registry可用
  2. 添加服务器后,您可以在公开端口上向JVM添加JMX连接 - &gt; 成功,因为我的程序在端口19301上公开了JMX,我能够查看详细信息
  3. 但是,我不能将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]部分来连接

1 个答案:

答案 0 :(得分:2)

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

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

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