2010-02-19 88 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代理,它穿过防火墙并很好地工作。

祝您好运:-)