我希望通过使用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运行的进程时:
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。
然后,我尝试从visual vm接口设置到localhost:3333的jmx链接:.弹出一个错误,上面写着:
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。
visualvm -cp:a ~/jmx/jmxremote_optional.jar然后,我尝试将visualvm连接到远程服务器:
service:jmx:jmxmp://localhost:3333现在,visual似乎试图无限期地连接。它在状态栏中显示了“添加服务:jmx:jmxp://localhost:3333”。然后继续这样做,直到我在远程端关闭应用程序,这时它会抛出一个弹出,说明它无法与服务器连接。
关于使用袜子:
我同时使用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>在本地端,我按照这个http://theholyjava.wordpress.com/2012/09/21/visualvm-monitoring-remote-jvm-over-ssh-jmx-or-not/设置了可视on连接。
使用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我想知道这是否与袜子频道有关。我以前在远程机器上做过单端口隧道,所以我无法想象这是隧道的配置问题。我在两边运行ubuntu。
谢谢你的阅读:)
发布于 2012-10-10 18:25:30
JMX/RMI很难直接通过隧道,因为如果RMI。基本上,服务器创建了一个RMI存根定义,它带有指向连接到服务器的方向,但是当您正在调优时,存根来自服务器,但是它们的方向都是错误的,它们无法从这里到达。
解决这一问题的最简单方法是放弃RMI连接器并使用JMXMP。底层协议是纯套接字,因此它非常适合隧道操作。
发布于 2012-10-11 06:30:07
使用SSH隧道和SOCKS代理。有关更多详细信息,请参阅这个职位。
发布于 2013-02-26 10:16:57
我两分钟前才这么做的..。
https://stackoverflow.com/questions/12825117
复制相似问题