2010-02-19 81 views
9

如果選中了有關此問題的其他問題,但至今沒有靈感。 這是我的設置: TC6在我的macbook上運行在Debian虛擬機上。在/etc/default/tomcat6.0我有以下設置選項:仍然無法通過VisualVM遠程連接Tomcat 6

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 

netstat的-ntlp給我:

tcp6  0  0 :::8080     :::*     LISTEN  6550/java 
tcp6  0  0 :::8086     :::*     LISTEN  6550/java 

凡6550:

root  6550 3.3 6.8 224888 52984 pts/0 Sl 10:31 0:43 /usr/lib/jvm/java-6-sun/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/var/lib/tomcat6.0/conf/logging.properties -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.endorsed.dirs=/usr/share/tomcat6.0/common/endorsed -classpath :/usr/lib/jvm/java-6-sun/jre//lib/jcert.jar:/usr/lib/jvm/java-6-sun/jre//lib/jnet.jar:/usr/lib/jvm/java-6-sun/jre//lib/jsse.jar:/usr/share/tomcat6.0/bin/bootstrap.jar:/usr/share/tomcat6.0/bin/commons-logging-api.jar -Dcatalina.base=/var/lib/tomcat6.0 -Dcatalina.home=/usr/share/tomcat6.0 -Djava.io.tmpdir=/var/lib/tomcat6.0/temp org.apache.catalina.startup.Bootstrap start 

防火牆:

Chain INPUT (policy DROP) 
target  prot opt source    destination   
ACCEPT  all  anywhere    anywhere    

Chain FORWARD (policy DROP) 
target  prot opt source    destination   

Chain OUTPUT (policy DROP) 
target  prot opt source    destination   
ACCEPT  all  anywhere    anywhere 

當我嘗試從OSX usin連接克jvisualm: - 添加與我的VM的主機名新的主機(它添加到/ etc /主機) - 添加新的JMX-連接

VisualVM的失敗:

Cannot connect using service:jmx:rmi///jndi/rmi://<vmhostname>:8086/jmxrmi 

當我連接我的虛擬機使用ssh -X,並在運行tomcat的同一臺機器上啓動jvisualvm,我最初並沒有看到TC,但我可以像上面那樣添加jmx連接。

這可能是一個問題,外國主機被神祕阻止訪問rmiregistry? 爲什麼會有人做這樣愚蠢的事情?

我在做什麼錯?

(對不起4冗長的文章)

+4

RMI還打開其他動態端口(以及默認的JMX連接使用RMI)。這使隧道和正確配置防火牆變得很痛苦。基本上,它從來沒有設計爲在任何地方運行,而是一個開放的網絡。既然我不能給出具體的細節,我只是寫了這個評論。 – 2010-02-19 10:05:30

+0

謝謝Joachim。其實防火牆的東西是讓我困惑的東西。由於它在我的本地機器上的虛擬機上運行,​​因此我已完全禁用防火牆(請參閱上文(ACCEPT ALL))。 你說,使用rmi是默認值。你有什麼其他的想法如何用visualvm監視遠程tomcat嗎? – er4z0r 2010-02-19 11:01:12

+0

謝謝@JoachimSauer解決了我的問題 – austin 2014-10-09 12:19:23

回答

0

確保您可以

a) ping <vmhostname> 
b) telnet <vmhostname> 8086 

還請注意,您可以使用IP地址而不是<vmhostname>

+0

虛擬機已啓動,我可以連接。沒有線索:( 剛剛嘗試過jconsole,這也失敗了。 – er4z0r 2010-02-20 14:04:15

+0

這是否意味着你可以連接到端口8086從Mac OS X到你的虛擬機? 我並不感到驚訝,jconsole無法正常工作,VisualVM和jconsole都使用 你可以嘗試在虛擬機上運行tcpdump,看看端口8086上是否有任何通信。 哦,我剛剛注意到tcp6 - 是否意味着你使用的是IPv6?如果是這樣,這可能是一個原因,爲什麼你不能連接到Tomcat。 – 2010-02-20 19:17:45

+0

謝謝。我會看看我能否以某種方式將它包裝在ipv4中。 – er4z0r 2010-02-24 10:46:11

0

確保jstatd進程正在運行的您要監視的遠程計算機,並具有所需的權限。

3

查看此頁面上的jmx監聽器。 http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html

它允許您設置JMX端口和RMI註冊表端口,這兩個端口都必須在防火牆上打開。

+2

這幾乎解決了我的問題,好的和短的後 - 在許多服務器上小心檢查RMI主機名,外部IP本身是不知道的,所以RMI只綁定到某個本地地址。 – Jan 2011-08-19 13:56:08

1

嘗試添加到catalina_opts:-Djava.rmi.server.hostname=vmhostname 並確保您的mac能夠解析此主機名,例如, nc -v vmhostname 8086 應該成功打開連接。

1

您可以嘗試將實際的IP和主機名添加到運行jstatd的/ etc/hosts中。

1

按照此步驟,

  • 下載jvisualvm設置從Download Jvisualvm

  • 解壓此設置,然後進入bin目錄下的命令行

  • 使用此命令啓動VisualVM的:

    \ bin> visualvm.exe -J-Dnetbeans.system_socks_proxy = localhost:9998 -J -Djava.net.useSyst emProxies =真

  • 得到膩子設置,去油灰的安裝目錄下面的命令SSH隧道來遠程系統

膩子-D 9998 -load Name_of_the_saved_putty_session

  • saved_putty_session應該有隧道到本地主機:JMX_port和some_source_port

  • 現在在visualvm UI左導航,右t單擊遠程和「添加遠程主機」,與遠程主機

  • 現就本次加入遠程主機右擊,並說「添加JMX連接」

  • 在接線盒說本地主機的公網IP:source_port_provided_in_putty_tunnel

  • 點擊確定按鈕,你就完成了。

5

這是關於how to connect Visual VM to Tomcat 7的教程。這在冗長的一面有點兒,但應該幫助你解決大多數人遇到的問題。

+0

+1,這爲我工作。原始問題的配置和爲我工作的配置之間的區別是這個標誌:-Djava.rmi.server.hostname = 50.112.22.47「 – DuffJ 2013-09-02 07:10:24

0

我會建議使用此選項:(即0.0.0.0)

-Dcom.sun.management.jmxremote.port=1099 

然後,連接與

service:jmx:rmi:///jndi/rmi://machinedomainname:1099/jmxrmi 

只要RMI在所有接口上監聽那麼就應該是沒有隻要防火牆關閉(或仔細配置),即可從遠程服務器連接。

1

所以上面的工作對我來說:

service:jmx:rmi:///jndi/rmi://machinedomainname:1099/jmxrmi

願意花半天之後。遵循所有通常的指示,並感到沮喪,上述破解。

我已經部署在Amazon EC2上使用以下標記一個播放應用:

-Dcom.sun.management.jmxremote 
    -Dcom.sun.management.jmxremote.port=<myport> 
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.local.only=false 
    -Djava.rmi.server.hostname=<mymachinedomainname> 

我有jvisualvm我的Mac上本地運行。

我加了一個jvisualvm與遠程主機的主機名:

<mymachinedomainname> 

然後添加添加JMX連接到這臺主機。 我試了推薦

service:jmx:rmi://<mymachinedomainname>:<myport> 

但它只是不連接。

但只要我做了

service:jmx:rmi:///jndi/rmi://<mymachinedomainname>:<myport>/jmxrmi 

代替。它連接並工作。

不知道爲什麼!但它的工作原理。

0

我實際上剛剛自己解決了這個問題並想出了它。

我敢打賭,問題是RMI連接 - 你無法預測它將使用哪個端口,所以你不能讓它與防火牆一起工作。

解決方法是使用SSH代理:

  1. SSH到您的應用程序正在運行,但這樣使用-D選項框:

    SSH用戶@ REMOTEHOST -D 9999

    這將啓動一個socks代理在本地機器上的端口9999

  2. 打開JVisualVM和喜好,在「網絡」配置我噸至使用SOCKS代理在本地主機,端口9999

如果你做到上面,你應該然後能夠連接到遠程計算機正常並且由於所有RMI流量現在是要在SSH代理,它穿過防火牆並很好地工作。

祝您好運:-)