9

如果检查了有关此问题的其他问题,但到目前为止还没有灵魂。这是我的设置:TC6 在我的 macbook 上的 debian vm 上运行。在 /etc/default/tomcat6.0 我设置了以下选项:

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 

当我尝试使用 jvisualm 从 OSX 连接时: - 添加一个带有我的 vm 主机名的新主机(将其添加到 /etc/hosts) - 添加一个新的 JMX-Connection

VisualVM 失败并显示:

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

当我使用连接到我的 VMssh -X并在运行 tomcat 的同一台机器上启动 jvisualvm 时,我最初看不到 TC,但我可以像上面一样添加 jmx 连接。

这可能是外国主机被神秘地阻止访问 rmiregistry 的问题吗?为什么会有人做这种蠢事?

我究竟做错了什么?

(抱歉 4 帖子太长了)

4

10 回答 10

5

这是关于如何将 Visual VM 连接到 Tomcat 7的教程。这有点冗长,但应该可以帮助您解决大多数人遇到的一些问题。

于 2012-02-05T22:42:12.803 回答
3

查看此页面上的 jmx 侦听器。 http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html

它允许您设置 JMX 端口和 RMI 注册表端口,这两者都必须在您的防火墙上打开。

于 2010-09-21T14:17:03.297 回答
1

您可以尝试将实际的 ip 和主机名添加到运行 jstatd 的 /etc/hosts 中。

于 2011-09-13T16:03:02.317 回答
1

所以上面对我有用:

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

在此花费 1/2 天后。遵循所有通常的指示并感到沮丧,上面破解了它。

我在亚马逊 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 

反而。它连接并工作。

不知道为什么!但它有效。

于 2014-09-19T14:56:46.150 回答
1

尝试添加到 catalina_opts:-Djava.rmi.server.hostname=vmhostname 并确保您的 mac 能够解析此主机名,例如 nc -v vmhostname 8086 应该成功打开连接。

于 2011-01-26T20:02:03.007 回答
1

按照这个步骤,

  • 下载 Jvisualvm下载 jvisualvm 设置

  • 解压缩此设置并从命令行转到 bin 目录

  • 使用此命令启动 visualvm:

    \bin>visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9998 -J-Djava.net.useSystemProxies=true

  • 获取腻子设置,转到腻子的安装目录,使用以下命令通过 ssh 隧道连接到远程系统

putty -D 9998 -load Name_of_the_saved_putty_session

  • saved_putty_session 应该有到 localhost:JMX_port 和 some_source_port 的隧道

  • 现在在左侧导航的visualvm UI中,右键单击远程和“添加远程主机”,远程主机的公共IP

  • 现在在这个添加的远程主机上右键单击并说“添加 JMX 连接”

  • 在连接框中说 localhost:source_port_provided_in_putty_tunnel

  • 单击确定按钮,您就完成了。

于 2011-09-16T15:24:02.263 回答
0

我实际上只是自己解决了这个问题并弄清楚了。

我敢打赌,问题在于 RMI 连接——您无法预测它将使用哪些端口,因此您无法让它与防火墙一起使用。

解决方法是使用 SSH 代理:

  1. SSH 到您的应用程序正在运行的框,但使用 -D 选项,如下所示:

    ssh 用户@remoteHost -D 9999

    这将在您的本地计算机上的端口 9999 上启动一个 socks 代理。

  2. 打开 JVisualVM 并在首选项中的“网络”下将其配置为在 localhost 的端口 9999 上使用 socks 代理。

如果您执行上述操作,那么您应该能够正常连接到远程计算机,并且由于所有 RMI 流量现在都通过 SSH 代理,它可以通过防火墙并且运行良好。

祝你好运 :-)

于 2014-12-31T12:52:25.653 回答
0

确保你可以

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

另请注意,您可以使用 IP 地址代替<vmhostname>

于 2010-02-19T13:56:58.267 回答
0

确保该jstatd进程正在您要监视的远程计算机上运行,​​并具有所需的权限。

于 2010-04-14T10:26:21.557 回答
0

我建议使用此选项:

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

然后,连接

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

只要 RMI 正在侦听所有接口(即 0.0.0.0),那么只要防火墙关闭(或仔细配置),从远程服务器连接就应该没有问题。

于 2012-11-13T21:32:05.520 回答