我读过视觉VM通过SSH远程但我想我没有完全理解,因为它不是为我工作:-(请有人可以给些例子吗?
ssh -D 9696 login@ip.of.external.machine
和visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
开始VisualVM的,但没有外部机器的过程被示出(仅当地的像VisualVM的本身)。 而且有时(但不总是)我得到的消息“通道3:打开失败:连接失败:连接被拒绝”在我的SSH窗口。
任何帮助吗?
您可能需要在远程端运行jstatd,或使用主机指定JMX连接:端口。
Jstatd:
jstatd -J-Djava.security.policy=permissions.txt [-p port]
之后:添加到目标机器的远程连接,并在该远程连接的属性配置jstatd连接。
(permissions.txt包含例如这样的:
grant {
permission java.security.AllPermission;
};
编辑:(回答评论)
-
ssh -D 9696 me@remote
,并且如上文所述远程命令行上运行jstatd。 如果你想jstatd是一个不同的端口而不是默认1099上,使用-p参数jstatd。 - 运行
visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
本地机器上 视觉VM:添加新的远程连接和远程指定的主机和端口jstatd(1099默认情况下,或在运行jstatd当-p指定的内容)
您现在应该看到在VisualVM的远程端的过程
我使用标准SSH隧道 , 没有防火墙端口打开另一种解决方案。 对我来说,SOCKS代理不起作用。
开始选择你的JVM:
-Dcom.sun.management.jmxremote =真
-Dcom.sun.management.jmxremote.ssl = FALSE
-Dcom.sun.management.jmxremote.authenticate = FALSE
-Dcom.sun.management.jmxremote.port = [端口1]
-D java.rmi.server.hostname =本地主机
-Dcom.sun.management.jmxremote.rmi.port = [PORT2]
最重要的部分是“server.hostname = localhost”的。 此外,你明确地定义两个端口(连接+“随机” RMI端口),“jmxremote.rmi.port”至少需要Java 7的更新4(我读的地方,没有检查这个信息 - 使用“lsof的-i”您服务器计算机来检查真正使用的端口)。
(当然,你可以使用身份验证或SSL)。
通过ssh当地port1与port2连接到服务器,并转发到本地主机:端口1 | 2的服务器。
在VisualVM的打开JMX连接到本地主机:端口1(无任何代理设置)。
我有jstatd在本地主机上绑定的问题,所以我不得不型
jstatd -J-Djava.security.policy=allPerm.policy -J-Djava.rmi.server.logCalls=true -p <port> -J-Djava.rmi.server.hostname=<my ip>
也为jvisualvm我使用这个参数,而不是
jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<socks-port>
这样一来,通过SSH连接代理,我可以用我的远程机器的真实IP地址。
从这个答案偷我自己做了一个全面的提醒我的网站 ..我希望你不要被方式介意Ankon酒店感谢这个:)
我有而通过ssh连接jVisualVM到远程应用程序相同的问题。
本教程帮我解决我的问题。 http://issamben.com/how-to-monitor-remote-jvm-over-ssh/
为了解决这个问题,确保:
您在JVM配置设置两个端口
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.rmi.port=9011 -Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote.local.only=false
SSH隧道建立正确
ssh -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011
我还发现,JVM参数:
-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
在我使用1.3.2编译没有工作。
因此,我使用的工具>选项>网络和下SOCKS设置手动设置。
但VisualVM的那样没有因为还没有找到远程进程。 然后我删除本地主机的“无代理主机”听,因为这可能阻止它。
我发现,在JVM参数为代理不工作。 在1.3.3版本至少(建111013)。 设置在工具代理>选项>网络为我工作。 同时系统范围的代理设置应工作,虽然根据定义,它会影响所有其他网络连接。
尝试不同的版本jvisualvm的(例如,从最新的https://visualvm.github.io/download.html )
我不能使它与jvisualvm工作,因为它没有使用SOCKS代理(我没有看到SSH -v -D 9696至jvisualvm相关的任何东西)。 远程应用中从未出现过jvisualvm。 然而VisualVM的给他们看了几秒钟后。
我知道这个问题是旧的,但我建议容易的解决方案,而不是使用jstat。
仅仅只使用SSH和Jvisualvm
- SSH与sockproxy(例如SSH -D 6666 host@123.123.123.123)
- 与袜子运行jvisualvm(jvisualvm.exe -J-DsocksProxyHost =本地主机-J-DsocksProxyPort = 6666)
- 添加JXM主机(例如:234.234.234.234:16000)
使用jvisualvm简单的方法来检测内存泄漏和监控CPU,应用程序的RAM