2017-06-22 151 views
0

从Jstat Documentation可以将jstat连接到本地以及远程JVM。可形成的URI为无法使用JStat连接到远程JVM

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

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

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其使用2步处理 -

  1. 提示经由默认端口上连接jstatd添加远程机器1099 - >我能够做因此和服务器得到添加证明RMI注册表可用
  2. 添加服务器后,您可以添加一个JMX连接到暴露的端口上的JVM - >成功,因为我的程序在端口19301暴露JMX,我可以查看详细信息

但是,我仍然无法将jstat用于同一目的。

运行jstat -gc PROCESS_ID @服务器给了我下面的例外 -

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

经过过网各种来源和他们谈具有jstatd 运行,我相信作为运行VisualVM的能添加机器。

QUES:我应该如何设计在jstat命令[VMID]部分连接

回答

2

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

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

一旦启动jstatd,使用jstat -options [email protected]命令来监视远程虚拟机。

+0

非常感谢@apangin 我盯着服务器上的jstatd,它工作。我能够通过jstat- root 23438 19717 0 00:11 pts/1 00:00:00 jstatd -J-Djava.security.policy = all.policy all.policy具有以下内容 - grant codebase“file:/opt/jdk/lib/tools.jar”permission java.security.AllPermission; }; 关键是要确保文件:在策略文件中应该有正确的路径。 jstatd文档有“..”来提供一个在我的情况下不需要的通用示例 –