gpt4 book ai didi

jmx - 有人曾经使用过远程 JMX JConsole 吗?

转载 作者:行者123 更新时间:2023-12-03 04:37:36 27 4
gpt4 key购买 nike

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

但是我们启动了 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和端口中。

看起来应该如此简单,但是没有错误,没有噪音,什么也没有。只是不起作用。

有人知道这方面的热门提示吗?

最佳答案

我有一个解决方案:

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

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

提示:无论是否有防火墙,此解决方案都有效。

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


1。您需要从此处获取适合您的 Windows 计算机的 putty 套件:

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

At least the putty.exe


2。在你的 Linux 机器上定义一个空闲端口:

<jmx-remote-port>

示例:

jmx-remote-port = 15666      


3。向 Linux 机器上的 java 进程添加参数

这必须完全像这样完成。如果按照下面的方式完成,它适用于防火墙后面的 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

示例:

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 <java-processname>

result ---> <process-id>

示例:

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

result ---> 24321


5。查找 RMIServer stub 下载的任意端口

java 进程在 Linux 机器上打开一个新的 TCP 端口,RMI 服务器 stub 将可供下载。该端口还需要通过 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>

示例:

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: <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

示例:

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

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


Settings to open an SSL tunnel via Putty


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

让 putty session 保持打开状态。

当您登录时,Putty 会通过 SSH 端口 22 将所有 TCP 连接隧道连接到 Linux 计算机。

JMX 端口:

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

RMI 服务器 stub 端口:

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


8。启动 JConsole/Java VisualVM/Java Mission Control 使用以下 URL 连接到您的 Java 进程

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

在 Linux 机器上,java 进程首先给出应答并发回 RMIServer 端口。在此示例中为 37123。

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

java 进程应答并且连接打开。

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:<jndi-remote-port>/jmxrmi

示例:

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


Connect via jmx service url


9。享受#8-]

关于jmx - 有人曾经使用过远程 JMX JConsole 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/151238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com