我似乎从来没有让这个工作过去.目前,我知道它不起作用.
但是我们启动了Java进程:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=6002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Run Code Online (Sandbox Code Playgroud)
我可以telnet到端口,"有东西"(也就是说,如果我不启动过程,没有任何答案,但如果我这样做,它确实),但我无法让JConsole工作填写IP和港口.
似乎它应该如此简单,但没有错误,没有噪音,没有任何东西.只是不起作用.
有人知道这个热门提示吗?
sus*_*tta 124
我有一个解决方案:
如果您的Java进程在防火墙后面的Linux上运行并且您希望在本地计算机上的Windows上启动JConsole/Java VisualVM/Java Mission Control,以将其连接到Java进程的JMX端口.
您需要通过SSH登录访问您的Linux机器.所有通信都将通过SSH连接进行隧道传输.
提示:无论是否有防火墙,此解决方案都能正常运行.
缺点:每次重启 java进程时,都需要再次执行4 - 9的所有步骤.
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html上
至少是putty.exe
<jmx-remote-port>
Run Code Online (Sandbox Code Playgroud)
jmx-remote-port = 15666
Run Code Online (Sandbox Code Playgroud)
这必须完全像这样.如果它完成如下,它适用于防火墙后面的Linux机器(它起作用的-Djava.rmi.server.hostname=localhost论点).
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=<jmx-remote-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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
ps -ef | grep <java-processname>
result ---> <process-id>
Run Code Online (Sandbox Code Playgroud)
ps -ef | grep ch.sushicutta.jmxremote.Main
result ---> 24321
Run Code Online (Sandbox Code Playgroud)
java进程在linux机器上打开一个新的TCP端口,RMI Server-Stubs可供下载.此端口还需要通过SSH隧道才能获得与Java虚拟机的连接.
有了netstat -lp这个端口,也可以找到lsof -i提示从java进程打开的端口.
注意:此进程始终在Java进程启动时更改.
netstat -lp | grep <process-id>
tcp 0 0 *:<jmx-remote-port> *:* LISTEN 24321/java
tcp 0 0 *:<rmi-server-port> *:* LISTEN 24321/java
result ---> <rmi-server-port>
Run Code Online (Sandbox Code Playgroud)
netstat -lp | grep 24321
tcp 0 0 *:15666 *:* LISTEN 24321/java
tcp 0 0 *:37123 *:* LISTEN 24321/java
result ---> 37123
Run Code Online (Sandbox Code Playgroud)
Source port: <jmx-remote-port>
Destination: localhost:<jmx-remote-port>
[x] Local
[x] Auto
Source port: <rmi-server-port>
Destination: localhost:<rmi-server-port>
[x] Local
[x] Auto
Run Code Online (Sandbox Code Playgroud)
Source port: 15666
Destination: localhost:15666
[x] Local
[x] Auto
Source port: 37123
Destination: localhost:37123
[x] Local
[x] Auto
Run Code Online (Sandbox Code Playgroud)

让putty会话开放.
当您登录时,Putty将通过SSH端口22将所有TCP连接隧道传送到Linux机器.
JMX端口:
Windows machine: localhost:15666 >>> SSH >>> linux machine: localhost:15666
Run Code Online (Sandbox Code Playgroud)
RMIServer的存根端口:
Windows Machine: localhost:37123 >>> SSH >>> linux machine: localhost:37123
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为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:<jndi-remote-port>/jmxrmi
Run Code Online (Sandbox Code Playgroud)
[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:15666/jmxrmi
Run Code Online (Sandbox Code Playgroud)
小智 79
添加-Djava.rmi.server.hostname='<host ip>'为我解决了这个问题.
fre*_*dev 52
此解决方案也适用于防火墙
-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
Run Code Online (Sandbox Code Playgroud)
Windows用户:
putty.exe -ssh user@remote-host -L 1616:remote-host:1616
Linux和Mac用户:
ssh user@remote-host -L 1616:remote-host:1616
jconsole在计算机上启动jconsole localhost:1616
Run Code Online (Sandbox Code Playgroud)
PS:在步骤2中,使用ssh并-L指定本地(客户端)主机上的端口1616必须转发到远程端.这是一个ssh隧道,有助于避免防火墙或各种网络问题.
Sim*_*olt 19
您可能遇到了防火墙问题."问题"是您指定的端口不是唯一使用的端口,它为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隧道并仍然让它工作:-)
Ser*_*gio 17
在过去几天让我的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 <atom_installation_directory>\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
Run Code Online (Sandbox Code Playgroud)
我没有看过任何Stack Overflow答案封面的一行是
-Dcom.sun.management.jmxremote.rmi.port=5002
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我试图检索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)
Run Code Online (Sandbox Code Playgroud)
Cra*_*Day 11
你在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=<same port as jmx-remote-port>
Run Code Online (Sandbox Code Playgroud)
例如,添加以启动参数:
-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
Run Code Online (Sandbox Code Playgroud)
对于端口转发,使用以下方式连接:
ssh -L 12345:localhost:12345 <username>@<host>
Run Code Online (Sandbox Code Playgroud)
如果您的主人是踩踏石头,只需在上面的步骤石头上运行以下链接就可以向前移动:
ssh -L 12345:localhost:12345 <username>@<host2>
Run Code Online (Sandbox Code Playgroud)
请注意,需要hostname = localhost来确保jmxremote告诉rmi连接使用隧道.否则它可能会尝试连接directy并点击防火墙.
专家提示:
RMI端口在任意portnr处打开.如果您有防火墙并且不想打开端口1024-65535(或使用vpn),则需要执行以下操作.
您需要修复(如具有已知编号)RMI注册表和JMX/RMI服务器端口.你可以通过在lib-dir中放置一个jar文件(catalina-jmx-remote.jar,它在extra的中)并在服务器下配置一个特殊的监听器来实现:
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
Run Code Online (Sandbox Code Playgroud)
(当然是激活JMX的常用标志
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Djava.rmi.server.hostname=<HOSTNAME> \
Run Code Online (Sandbox Code Playgroud)
请参阅:http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html上的 JMX远程生命周期监听器
然后你可以使用这个可怕的URL连接:
service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi
Run Code Online (Sandbox Code Playgroud)
检查您的服务器是否在防火墙后面.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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146370 次 |
| 最近记录: |