2017-06-22 152 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文檔有「..」來提供一個在我的情況下不需要的通用示例 –