gpt4 book ai didi

java - jmx/jstatd 通过 ssh 隧道访问远程机器

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:04 28 4
gpt4 key购买 nike

我想使用 jmx 或 jstatd 通过 ssh 隧道(到 EC2 机器)使用 visualvm 应用程序。我该怎么做呢?以下是已尝试(和失败)的列表:(顺便说一句:如果 visual vm 不合适,我如何找到远程机器上的内存泄漏?)

jstatd:尝试:

我在 EC2 机器上设置了 jstatd 服务器(应用程序已经在上面运行)然后我设置了一个隧道映射本地端口 3333 到远程端口 1099在 VisualVM 中,我尝试在端口 3333 上使用 jstatd 进行连接... EC2 上的所有进程都没有出现

这个链接说 jstatd 打开了另一个端口: http://rukuro-blog.heroku.com/2011/06/30/monitoring-remote-java-applications-with-visualvm...所以我将该端口从本地主机隧道传输到远程主机。我重新启动了 visual vm ... 仍然没有

当我尝试使用以下命令列出从 EC2 运行的进程时:

jps -l -m -v rmi://localhost

...我得到了一个进程列表

当我在家用机器上列出它时使用

jps -l -m -v rmi://localhost:3333

....我没有!那么,rmi 端口是否未与 jstatd 端口 (3333) 建立隧道...?

jmx 尝试:

我使用以下命令在远程机器上启动了应用程序:

java -Dcom.sun.management.jmxremote.port=3333 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false\
-cp :post/* <appName>

...该应用程序运行正常,所以我将本地端口 3333 隧道连接到远程 3333

然后我尝试从可视化虚拟机界面设置一个指向 localhost:3333 的 jmx 链接:...它弹出一个错误说:

cannot connect to localhost:3333 using service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi

如果我需要设置一个指向删除 RMI 服务器的链接,我不知道该怎么做。

JMXMP 尝试:

这很有希望,但有些地方不太对:

首先,我将 jmx_remote jar 添加到类路径,并使用与上面显示的 JMX 案例中相同的命令在远程计算机上启动应用程序。我在 oracle download link 找到了 jar

我设置了一个从本地端口 3333 到远程端口 3333 的 ssh 隧道。然后我在 calsspath 中使用相同的 jmx_remote 文件启动了 visualvm。

visualvm -cp:a ~/jmx/jmxremote_optional.jar

然后我尝试将 visualvm 连接到远程服务器:

service:jmx:jmxmp://localhost:3333

现在 visual vm 似乎无限期地尝试连接。它在状态栏中显示“添加服务:jmx:jmxp://localhost:3333”......并继续这样做直到我关闭远程端的应用程序,此时它抛出一个弹出窗口说它无法连接与服务器。

关于使用 SOCKS:

我尝试同时使用 JMX 和 jstatd 失败了。

我不确定 SOCKS 代理是否正常工作,所以这是我尝试连接的方式:

ssh -i ~/.ssh/starter.pem -v -D 9696 user@host

为了完整起见,我在另一端开始了命令:

    java -Dcom.sun.management.jmxremote\
-Dcom.sun.management.jmxremote.ssl=false\
-Dcom.sun.management.jmxremote.authenticate=false\
-Dcom.sun.management.jmxremote.port=3333 <app>

在本地端,我按照 LINK to VisualVm help page 设置了 visualvm 连接.

通过 JMX 连接,我通过在 visualvm 上右键单击主机并在提示时填写主机端口来设置机器名称和端口。此时底部的状态栏显示 visualvm 正在尝试连接到远程计算机,几分钟后它失败了。

通过 jstatd 连接,我希望远程进程能够自动显示。这没有发生......没有错误消息或任何东西。

在 socks 端,以下消息循环重复:

debug1: Connection to port 9696 forwarding to socks port 0 requested.
debug1: channel 2: new [dynamic-tcpip]
channel 3: open failed: connect failed: Connection timed out
debug1: channel 3: free: direct-tcpip: listening port 9696 for 50.16.35.69 port 3333, connect from 127.0.0.1 port 43909, nchannels 4
debug1: Connection to port 9696 forwarding to socks port 0 requested.
debug1: channel 3: new [dynamic-tcpip]
channel 2: open failed: connect failed: Connection timed out
debug1: channel 2: free: direct-tcpip: listening port 9696 for 50.16.35.69 port 1099, connect from 127.0.0.1 port 44644, nchannels 4

我想知道这是否与 socks channel 有关。我之前已经将单个端口隧道连接到远程机器,所以我无法想象这是隧道的配置问题。我在两边都运行 ubuntu linux。

感谢阅读:)

最佳答案

将 SSH 隧道与 SOCKS 代理结合使用。参见 this post了解更多详情。

关于java - jmx/jstatd 通过 ssh 隧道访问远程机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12825117/

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