当前位置:  开发笔记 > 编程语言 > 正文

有没有人有远程JMX JConsole工作?

如何解决《有没有人有远程JMXJConsole工作?》经验,为你挑选了9个好方法。

我似乎从来没有让这个工作过去.目前,我知道它不起作用.

但是我们启动了Java进程:

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

我可以telnet到端口,"有东西"(也就是说,如果我不启动过程,没有任何答案,但如果我这样做,它确实),但我无法让JConsole工作填写IP和港口.

似乎它应该如此简单,但没有错误,没有噪音,没有任何东西.只是不起作用.

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



1> sushicutta..:

我有一个解决方案:

如果您的Java进程在防火墙后面的Linux上运行并且您希望在本地计算机上的Windows上启动JConsole/Java VisualVM/Java Mission Control,以将其连接到Java进程JMX端口.

您需要通过SSH登录访问您的Linux机器.所有通信都将通过SSH连接进行隧道传输.

提示:无论是否有防火墙,此解决方案都能正常运行.

缺点:每次重启 java进程时,都需要再次执行4 - 9的所有步骤.


1.您需要从这里获得Windows机器的putty-suite:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html上

至少是putty.exe


2.在linux机器上定义一个空闲端口:

例:

jmx-remote-port = 15666      


3.在linux机器上为java进程添加参数

这必须完全像这样.如果它完成如下,它适用于防火墙后面的Linux机器(它起作用的-Djava.rmi.server.hostname=localhost论点).

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

例:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15666 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=localhost ch.sushicutta.jmxremote.Main


4.获取Java进程的Process-Id
ps -ef | grep 

result ---> 

例:

ps -ef | grep ch.sushicutta.jmxremote.Main

result ---> 24321


5.为RMIServer存根下载找到任意端口

java进程在linux机器上打开一个新的TCP端口,RMI Server-Stubs可供下载.此端口还需要通过SSH隧道才能获得与Java虚拟机的连接.

有了netstat -lp这个端口,也可以找到lsof -i提示从java进程打开的端口.

注意:此进程始终在Java进程启动时更改.

netstat -lp | grep 

tcp        0      0 *:     *:*     LISTEN      24321/java
tcp        0      0 *:     *:*     LISTEN      24321/java


result ---> 

例:

netstat -lp | grep 24321

tcp        0      0 *:15666     *:*     LISTEN      24321/java
tcp        0      0 *:37123     *:*     LISTEN      24321/java


result ---> 37123


6.使用putty从Windows计算机启用两个SSH隧道
Source port: 
Destination: localhost:
[x] Local       
[x] Auto       

Source port: 
Destination: localhost:
[x] Local       
[x] Auto

例:

Source port: 15666
Destination: localhost:15666
[x] Local       
[x] Auto       

Source port: 37123
Destination: localhost:37123
[x] Local       
[x] Auto


通过Putty打开SSL隧道的设置


7.使用启用此SSH隧道的Putty登录到您的Linux计算机.

让putty会话开放.

当您登录时,Putty将通过SSH端口22将所有TCP连接隧道传送到Linux机器.

JMX端口:

Windows machine: localhost:15666   >>> SSH >>>   linux machine: localhost:15666

RMIServer的存根端口:

Windows Machine: localhost:37123   >>> SSH >>>   linux machine: localhost:37123


8.启动JConsole/Java VisualVM/Java Mission Control以使用以下URL连接到Java Process

这是有效的,因为JConsole/Java VisualVM/Java Mission Control认为您连接到本地Windows计算机上的端口.但Putty将所有有效负载发送到您的linux机器的端口15666.

在linux机器上,首先java进程给出答案并发送回RMIServer端口.在这个例子中37123.

然后JConsole/Java VisualVM/Java Mission Control认为它连接到localhost:37123并且putty会将整个有效负载发送到linux机器

java Process回答并且连接已打开.

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:/jmxrmi

例:

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:15666/jmxrmi


通过jmx服务网址连接


9.享受#8-]


我得到了一个提示,我们可以将rmi.port设置为固定端口号,因此我们可以为RMIServer存根下载设置任意端口.这应该与Java属性"com.sun.management.jmxremote.rmi.port = "一起使用.它看起来像是Oracle Java VM中的一个未记录的功能.
@sushicutta你可以在你的答案中添加这个提示,它的工作完全正常,并且可以删除从4到6的步骤,捕获的是你的转发端口必须与原始端口相同,并且jmx和rmi端口也必须一样的

2> 小智..:

添加-Djava.rmi.server.hostname=''为我解决了这个问题.


没有为我解决这个问题.连接windows-2-windows对我来说不是问题但是当我尝试从Windows上的JVM Jvisualvm.exe连接到使用Oracle JDK 1.6.024监视在SUSE上运行的java服务时,它无法连接.出于这个原因,我认为这个人的问题仍然没有答案.
在我的情况下,我必须添加IP地址(-Djava.rmi.server.hostname = ).hostname -i给了我两个ip地址,正确的一个是列表中的第二个.

3> freedev..:

试过Java 8

此解决方案也适用于防火墙

1.将它添加到remote-host上的java启动脚本中:

-Dcom.sun.management.jmxremote.port=1616
-Dcom.sun.management.jmxremote.rmi.port=1616
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

2.在您的计算机上执行此操作.

Windows用户:

putty.exe -ssh user@remote-host -L 1616:remote-host:1616

Linux和Mac用户:

ssh user@remote-host -L 1616:remote-host:1616

3. jconsole在计算机上启动

jconsole localhost:1616

4.玩得开心!

PS:在步骤2中,使用ssh-L指定本地(客户端)主机上的端口1616必须转发到远程端.这是一个ssh隧道,有助于避免防火墙或各种网络问题.


真的很糟糕Oracle没有提到"com.sun.management.jmxremote.rmi.port","java.rmi.server.hostname"https://docs.oracle.com/javase/8/docs/technotes/guides/ management/agent.html我想那是我的问题.
有用。仅添加我在隧道上的经验:1)可以在“ -L 1616:localhost:1616”中使用“ localhost” 2)无法更改源端口,即,这将不起作用:“-L 9999:localhost:1616”

4> Simon Groene..:

您可能遇到了防火墙问题."问题"是您指定的端口不是唯一使用的端口,它为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隧道并仍然让它工作:-)


我只能使用http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html中描述的别名以及设置-Djava.rmi.server.hostname来解决防火墙问题.另一个答案在这里

5> Sergio..:

在过去几天让我的Google-fu进行测试之后,我终于能够在编译Stack Overflow和此页面的答案后开始工作http://help.boomi.com/atomsphere/GUID-F787998C- 53C8-4662-AA06-8B1D32F9D55B.html.

从Dell Boomi页面重新发布:

To Enable Remote JMX on an Atom

If you want to monitor the status of an Atom, you need to turn on Remote JMX (Java Management Extensions) for the Atom.

Use a text editor to open the \bin\atom.vmoptions file.

Add the following lines to the file:

-Dcom.sun.management.jmxremote.port=5002
-Dcom.sun.management.jmxremote.rmi.port=5002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

我没有看过任何Stack Overflow答案封面的一行是

-Dcom.sun.management.jmxremote.rmi.port=5002

在我的情况下,我试图检索Kakfa指标,所以我只是更改了上面的选项以匹配-Dcom.sun.management.jmxremote.port值.因此,如果没有任何类型的身份验证,最小配置应该如下所示:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=(jmx remote port)

-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=(jmx remote port)
-Djava.rmi.server.hostname=(CNAME|IP Address)



6> Craig Day..:

你在Linux上运行吗?管理代理程序可能绑定到localhost:

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



7> 小智..:

通过在步骤3中添加以下行,可以跳过Sushicutta的步骤4-7:

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

例如,添加以启动参数:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.rmi.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

对于端口转发,使用以下方式连接:

ssh -L 12345:localhost:12345 @

如果您的主人是踩踏石头,只需在上面的步骤石头上运行以下链接就可以向前移动:

ssh -L 12345:localhost:12345 @

请注意,需要hostname = localhost来确保jmxremote告诉rmi连接使用隧道.否则它可能会尝试连接directy并点击防火墙.



8> supdog..:

专家提示:

RMI端口在任意portnr处打开.如果您有防火墙并且不想打开端口1024-65535(或使用vpn),则需要执行以下操作.

您需要修复(如具有已知编号)RMI注册表和JMX/RMI服务器端口.你可以通过在lib-dir中放置一个jar文件(catalina-jmx-remote.jar,它在extra的中)并在服务器下配置一个特殊的监听器来实现:


(当然是激活JMX的常用标志

    -Dcom.sun.management.jmxremote  \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Djava.rmi.server.hostname= \

请参阅:http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html上的 JMX远程生命周期监听器

然后你可以使用这个可怕的URL连接:

service:jmx:rmi://:10002/jndi/rmi://:10001/jmxrmi



9> arganzheng..:

检查您的服务器是否在防火墙后面.JMX基于RMI,它在启动时打开两个端口.一个是寄存器端口,默认值是1099,可以通过com.sun.management.jmxremote.port选项指定.另一种是用于数据通信,并且是随机的,这是导致问题的原因.一个好消息是,从JDK6开始,该随机端口可以由该com.sun.management.jmxremote.rmi.port选项指定.

export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8991 -Dcom.sun.management.jmxremote.rmi.port=8991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有