5

抱歉,如果这是重复之前提出的问题,但我已经尝试了此处和其他地方提供的解决方案,但似乎没有一个对我有用。

场景:我需要分析位于防火墙后面的生产 Tomcat 7 服务器。我只能通过 SSH 访问此服务器。选择的分析工具是 Visualvm,这些服务器没有安装 GUI。我尝试从运行 Ubuntu 10.04 服务器 LTS 连接的服务器和机器。

可能的解决方案:似乎可以通过 SSH 隧道使用 visualvm,下面给出的链接提供了非常详细的指南:

Tomcat+VisualVM+SSH 指南

此外,我还在 Tomcat 的 /conf 目录中添加了一个 jmxremote.access 文件,其中包含以下两行:

monitorRole readonly
controlRole readwrite

问题:我按照文章中提供的步骤进行操作,一切似乎都很好。我可以使用 jmxterm 和指南中给出的连接字符串在本地(从服务器)连接到服务器中的 jmx 端口。

我按照指南配置了本地 tomcat 作为测试,Visualvm 使用连接字符串连接到这个 tomcat 实例没有问题。

但是,VisualVM 不会通过 SSH 隧道连接到远程服务器。我尝试了 JConsole,因为它更简单并且具有更好的日志记录工具,并且我收到以下消息序列:

FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi]  connecting...
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] finding stub...
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] connecting stub...
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] getting connection...
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] failed to connect: java.rmi.NoSuchObjectException: no such object in table

关于我在这里做错了什么的任何想法?任何帮助是极大的赞赏!

谢谢你。

4

2 回答 2

2

我认为您遇到的问题(参考文章并未真正解决)是 jmx-rmi,或者更具体地说,RMI 本身的工作方式。您的 Tomcat 服务器设置如下:

  1. 创建了一个配置为连接到localhost:12009的 RMI 远程设备。
  2. 在 localhost 上创建了一个 RMI 注册表,监听端口为localhost:12008

当您在本地运行时,您在 RMI 注册表中查找存根,当您调用存根以发出 jmx 调用时,它连接到localhost:12009,没问题。

当您通过 SSH 远程运行时,我假设您已经从远程隧道连接到端口 12008 上的 tomcat 服务器,因此当您发出请求时,您的远程 localhost:12008是隧道连接tomcatServer:12008的,因为日志输出似乎表明您找到了 stub ok。

接下来,您的远程对存根执行,而存根又尝试连接localhost:12009并失败。

我的猜测是,您需要通过隧道将远程的 localhost:12008localhost:12009 重定向到 tomcatServer:12008tomcatServer:12009。

解决这个问题的另一种方法是放弃 RMI jmx 协议并使用Jolokia (HTTP)、JMX-WS (HTTP WebService) 或JMXMP (Socket) 之类的东西。这将使您的 SSH 调谐生活变得更加轻松。如果您想尝试 JMXMP,我创建了一个名为OpenDMK的 github 项目,该项目具有 mavenized 构建。您将需要jmx-optional包。

于 2012-09-07T13:48:42.253 回答
0

谢谢你的提问!——我有同样的基本需求。抱歉,我实际上并没有在这里添加任何新内容,但我想我会提到您提供的参考: https ://www.liferay.com/web/thiago.moreira/blog/-/blogs/how-to-monitor- liferay-tomcat-remotely-through-firewalls-using-visualvm 立即为我工作(仅与更新版本相关的非常小的调整——Tomcat 7 和 VisualVM 1.3.8)。在我的例子中,Tomcat 在 CentOS 6.6 上运行,监控机器是 Mac(也许这可以帮助其他人)。再次感谢。

于 2015-01-24T06:23:50.767 回答