java - 当目标位于 NAT 之后时 VisualVM 远程工作?

标签 java jboss jmx jvisualvm

我位于开发人员网络中,要使用 JVisualVM 监控的 JBoss 位于单独网络中的客户端防火墙后面。 JBoss 通过 NAT 暴露给我们。当从我们的开发者网络使用 telnet 时,暴露的 JMX 端口可以工作,但 JVisualVM 仍然找不到远程 JMX。显然,这可能是由于两件事造成的:1) 需要访问一个或多个动态 RMI 套接字,或者 2) 未定义“java.rmi.server.hostname”。我的问题可能是第 1 点和第 2 点,但显然由于我们有 SSH 访问权限,因此可以根据此站点解决此问题:

http://rafaelsteil.com/setting-up-jmx-for-jconsole-visualvm-on-ec2-plus-jetty-configuration/

“java.rmi.server.hostname”是服务器的公共(public)主机名(例如 example.com),不带 HTTP 或其他任何内容。您不能使用内部地址,否则您将无法远程访问该服务。

但是,我对“java.rmi.server.hostname”有一个疑问,定义的 IP 地址应该是服务器内部 IP 还是公开暴露给我们开发者网络的 NAT IP?

最佳答案

实际上我自己刚刚解决了这个问题并解决了。

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

解决方法是使用 SSH 代理:

  1. 通过 SSH 连接到运行应用程序的机器,但使用 -D 选项,如下所示:

    ssh user@remoteHost -D 9999

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

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

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

祝你好运:-)

关于java - 当目标位于 NAT 之后时 VisualVM 远程工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26054075/

相关文章:

java - 如何查询有某种类型订单或根本没有订单的客户?

java - 我在使用 selenium Jar 文件 : 时在 eclipse 中收到此错误

java - 尝试将我的 GWT 项目拆分为多个模块 - "did you forget to inherit a required module?"

java - 使用什么 JComponent?

java - JBoss standalone.conf VS standalone.conf.bat

java - 无法将 mysql 驱动程序与 Wildfly 9.0.2 一起使用,但它似乎已正确加载

java - Jboss 6.4 Infinispan 8.2 和 JGroups - ClassNotFoundException

java - 启用 JMX 的 Tomcat7 打开 2 个额外的随机监听端口

java - RMI 禁用,Java 仍然在端口 1099 上监听

java - 使用 JMX 以编程方式公开调用统计信息