Ant*_*kiy 3 jmx visualvm socks jstat ssh-tunnel
我正在尝试分析远程 Java 应用程序,实际上它是一个游戏服务器。它在我的本地机器(带有 JDK1.7.0_02 x64 的 Windows XP x64)上正常工作,但在生产服务器(带有 JDK1.7.0_03 i586 的 CentOS)上表现得非常奇怪。
我做了很多搜索,发现我应该使用 VisualVM 来完成这项任务。所以 VisualVM 在本地机器上运行良好,但在本地机器上没有挂起,我需要在生产环境中使用真实有效负载进行分析。我用参数在远程机器上启动了 jstatd
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=false &
Run Code Online (Sandbox Code Playgroud)
与策略文件
grant codebase "file:/usr/java/jdk1.7.0_02/lib/tools.jar" {
permission java.security.AllPermission;
};
Run Code Online (Sandbox Code Playgroud)
然后我像这样启动了我的 Java 应用程序
java -server -Dcom.sun.management.jmxremote\
-Dcom.sun.management.jmxremote.port=4000\
-Dcom.sun.management.jmxremote.ssl=false\
-Dcom.sun.management.jmxremote.authenticate=false\
-jar /home/pinballSocketServer/pinballSocketServer.jar
Run Code Online (Sandbox Code Playgroud)
application 和 jstatd 都以 root 权限启动。
并且 VisualVM 无法连接到远程主机。但是在远程主机上,我看到以下日志,而 VisualVM 正在运行并添加了远程主机:
Feb 16, 2012 7:11:52 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Feb 16, 2012 7:11:56 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Feb 16, 2012 7:12:00 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Feb 16, 2012 7:12:04 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-217.16.27.195: [217.16.27.195: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Run Code Online (Sandbox Code Playgroud)
进一步谷歌搜索后,我发现我需要使用 ssh 隧道。我用以下方式配置了腻子
http://www.advancedigital.ru/show/putty_config.jpg
和 VisualVM 作为这个
http://www.advancedigital.ru/show/visualvm_config.jpg
VisualVM 上方的 Adter 操作连接到远程主机,但我只能看到线程摘要图表并且分析器处于非活动状态。
我已经看到一些建议,即两台机器上的 jvm 应该相似并且具有相同的平台(x86 或 x64),但我已经尝试从另一台机器(带有 JDK1.7.0_03 x86 的 windows 7 x86)进行分析,并且具有相同的结果。
我也试过这个,但再次得到相同的结果。 通过 ssh 的 VisualVM
我怎样才能让这个分析工作?
即使已经回答了这个问题,我还是设法做到了,所以我将添加我的方法:
我使用了以下来源:
https://bowerstudios.com/node/731
我在 Windows 中使用具有 ssh 命令的 git bash 执行此操作。您也可以使用 cygwin 或纯 minggw。
1) 在命令提示符下运行 ssh 隧道命令(我在 git bash/MINGGW32 中执行此操作)。
ssh -D 9010 -p 22 root@IP -v
Run Code Online (Sandbox Code Playgroud)
2) 使用 JMX 选项在服务器上运行您的应用程序(单行)
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false -jar application.jar
Run Code Online (Sandbox Code Playgroud)
3)通过socks代理运行visualVM进行连接(一行)
visualvm -J-Dnetbeans.system_socks_proxy=localhost:9010
-J-Djava.net.useSystemProxies=true
Run Code Online (Sandbox Code Playgroud)
4)实际上在visualVM中添加您的JMX远程连接
也可用:http : //maythesource.com/2013/12/04/connecting-to-jmx-from-visualvm-using-ssh-tunnel/(将随着时间的推移更新更多信息)。
| 归档时间: |
|
| 查看次数: |
11682 次 |
| 最近记录: |