有没有人能使用远程JMX JConsole来工作?

时间:2020-03-06 14:54:07  来源:igfitidea点击:

看来我过去从未做到这一点。目前,我知道它不起作用。

但是,我们启动了Java流程:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=6002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

我可以远程登录到端口,并且"那里有东西"(即,如果我不启动该进程,则什么也没有答案,但是如果我这样做,它确实可以),但是我无法让JConsole来填写IP和港口。

似乎它应该是如此简单,但是没有错误,没有噪音,什么也没有。就是行不通。

有人知道这个热门提示吗?

解决方案

我们在Linux上运行吗?也许管理代理绑定到本地主机:

http://java.sun.com/j2se/1.5.0/docs/guide/management/faq.html#linux1

在测试/调试/诊断远程JMX问题时,请首先始终尝试连接包含MBeanServer的同一主机(即localhost),以排除网络和其他非JMX特定的问题。

我们可能遇到防火墙问题。 "问题"是我们指定的端口不是唯一使用的端口,它为RMI使用了1个甚至2个以上的端口,而这些端口可能已被防火墙阻止。

如果我们使用默认的RMI配置,则不会预先知道其中一个额外的端口,因此我们必须打开可能无法使服务器管理员满意的大范围端口。

有一种解决方案不需要打开大量端口,但是,我已经使用组合的源代码片段和技巧来使其工作

http://forums.sun.com/thread.jspa?threadID=5267091链接不再起作用

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

http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html

甚至有可能设置ssh隧道并使其正常工作:-)

添加-Djava.rmi.server.hostname ='<host ip>'对我来说解决了这个问题。

我在挂钩到运行Linux Redhat ES3的tomcat的Windows上运行JConsole / JVisualVm。

使用以下命令禁用数据包筛选对我有用:

/usr/sbin/iptables -I INPUT -s jconsole-host -p tcp --destination-port jmxremote-port -j ACCEPT

其中,jconsole-host是运行JConsole的主机名或者主机地址,而jmxremote-port是为远程管理设置的com.sun.management.jmxremote.port的端口号。