首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过ssh隧道访问远程计算机的jmx/jstatd

通过ssh隧道访问远程计算机的jmx/jstatd
EN

Stack Overflow用户
提问于 2012-10-10 17:36:01
回答 4查看 13.6K关注 0票数 14

我希望通过使用jmx或jstatd的ssh隧道(到EC2机器)使用visualvm应用程序。我该怎么做?下面列出了尝试过的内容(失败了):(顺便说一句:如果visual不合适,如何在远程计算机上查找内存泄漏?)

jstatd:尝试:

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

这个链接显示jstatd打开了另一个端口:http://rukuro-blog.heroku.com/2011/06/30/monitoring-remote-java-applications-with-visualvm .所以我把那个端口从本地主机挖到了远程。我重新启动了视觉虚拟机..。还是什么都没有

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

代码语言:javascript
复制
jps -l -m -v rmi://localhost

..。我有一个程序列表

当我把它列在我的家用机器上的时候

代码语言:javascript
复制
jps -l -m -v rmi://localhost:3333

……我什么都没有!那么,rmi端口是否没有使用jstatd端口(3333) .?

jmx尝试:

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

代码语言:javascript
复制
java -Dcom.sun.management.jmxremote.port=3333 \
     -Dcom.sun.management.jmxremote.ssl=false \
     -Dcom.sun.management.jmxremote.authenticate=false\
        -cp :post/* <appName>

..。该应用程序工作,所以我隧道本地端口3333到远程3333。

然后,我尝试从visual vm接口设置到localhost:3333的jmx链接:.弹出一个错误,上面写着:

代码语言:javascript
复制
cannot connect to localhost:3333 using service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi

如果我需要设置一个链接到remove服务器,我不知道如何做。

JMXMP尝试:

这是有希望的,但有些事情并不完全正确:

首先,我将jmx_remote jar添加到类路径中,并使用与前面显示的相同的命令在远程机器上启动应用程序。我在oracle下载链接找到了那个罐子

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

代码语言:javascript
复制
visualvm -cp:a ~/jmx/jmxremote_optional.jar

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

代码语言:javascript
复制
service:jmx:jmxmp://localhost:3333

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

关于使用袜子:

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

我不确定SOCKS代理是否有效,下面是我试图连接的方式:

代码语言:javascript
复制
ssh -i ~/.ssh/starter.pem -v -D 9696 user@host

为了完整起见,我在另一端用以下命令启动了命令:

代码语言:javascript
复制
    java -Dcom.sun.management.jmxremote\
 -Dcom.sun.management.jmxremote.ssl=false\
 -Dcom.sun.management.jmxremote.authenticate=false\
 -Dcom.sun.management.jmxremote.port=3333 <app>

在本地端,我按照这个http://theholyjava.wordpress.com/2012/09/21/visualvm-monitoring-remote-jvm-over-ssh-jmx-or-not/设置了可视on连接。

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

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

在socks方面,以下消息周期性地重复:

代码语言:javascript
复制
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

我想知道这是否与袜子频道有关。我以前在远程机器上做过单端口隧道,所以我无法想象这是隧道的配置问题。我在两边运行ubuntu。

谢谢你的阅读:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-10 18:25:30

JMX/RMI很难直接通过隧道,因为如果RMI。基本上,服务器创建了一个RMI存根定义,它带有指向连接到服务器的方向,但是当您正在调优时,存根来自服务器,但是它们的方向都是错误的,它们无法从这里到达。

解决这一问题的最简单方法是放弃RMI连接器并使用JMXMP。底层协议是纯套接字,因此它非常适合隧道操作。

票数 1
EN

Stack Overflow用户

发布于 2012-10-11 06:30:07

使用SSH隧道和SOCKS代理。有关更多详细信息,请参阅这个职位

票数 3
EN

Stack Overflow用户

发布于 2013-02-26 10:16:57

我两分钟前才这么做的..。

  • 端口8686上有jmx的远程服务器-此端口被锁定。
  • 远程框上的sshd_config应该有“AllowTcpForwarding是”或注释掉
  • 使用端口打开putty ssh会话,将本地端口8686 (或其他什么)转发到localhost:8686
  • 在VisualVm中添加指向本地转发端口的本地jmx连接。
  • VisualVm自动地看到jvm并开始监视
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12825117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档