tomcat - 如何使用ssh隧道远程连接到tomcat上的jmx而不破坏ehcache

标签 tomcat ssh rmi jmx ehcache

我已按照以下链接中的说明在 tomcat 内的单个端口上创建我自己的 RMI 注册表和 jmx 服务器。根据评论,我需要设置-Djava.rmi.server.hostname=localhost。完成后,我确实可以使用 ssh 端口转发通过 jconsole 连接到我的服务器。

http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx

但是,我发现它有破坏我们使用 RMI 的 ehcache 复制的非常糟糕的副作用。它无法提示它无法从远程对等本地主机引导。我猜是因为对等点都通过设置 -Djava.rmi.server.hostname=localhost 将其 rmi 服务器主机名设置为 localhost。

有没有人可以解决这个问题?

最佳答案

我刚遇到这个问题。问题是 java.rmi.servername.hostname 属性是全局的。为了使 ehcache 和 jmx 服务器协调运行,您必须在运行 VisualVM 的机器上执行一些 hack。

这是您需要做的。这是基于为客户端使用 Mac,因此请根据需要修改命令。

  1. 删除 -Djava.rmi.server.hostname=localhost。

  2. 编写一个测试程序,它将为您提供要分析的服务器计算机上的 InetAddress.getLocalHost().getHostAddress() 的值。这应该给你本地 ip(如果 nat'd 是私有(private)的)。您必须在本地计算机上引用此 IP。在下面的命令说 IP 的地方使用这个 IP。

  3. 现在,这是有趣的部分:将内部 IP 添加到计算机上的环回接口(interface)。 (ifconfig lo0 IP netmask 255.255.255.0 up)

  4. 测试这实际上会将流量定向到环回。它应该返回环回。 (路由获取IP)

  5. 启动 SSH 隧道:ssh -C -L IP:PORT:localhost:PORT -L IP:OTHER_PORT:localhost:OTHER_PORT user@host。

注意 ssh 隧道的 IP 实际上是现在绑定(bind)到环回的 IP。您不再指本地主机,而是指机器的 IP。您还必须修改 JMX URL 以引用此 IP 而不是本地主机。

关于tomcat - 如何使用ssh隧道远程连接到tomcat上的jmx而不破坏ehcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2777631/

相关文章:

java - 我可以(轻松地)使用第三方库来处理 Java RMI 的序列化吗?

tomcat - 我已经清除了 Netbean 的缓存,但 Tomcat 仍在读取过去的项目

java - vaadin - 无法加载应用程序类

Azure错误: No Configuration Set should be specified while using a VMImage with a specialized OS Disk Configuration

java - 获取连接到 RMI 服务的客户端数量

java - 如何动态指定JMX端口号

macos - 使用适用于 Mac 的 Docker 连接 JMX

java - JSF 标签未呈现 - FacesServlet 可能无法正常工作?

ruby - 为什么 Ruby 给出错误 "point is not on curve"?

ruby-on-rails - 找不到有效的 gem : certificate verify failed