我通过ssh远程阅读Visual VM,但我认为我还没有完全理解,因为它不适合我:-(请有人举个例子吗?
ssh -D 9696 login@ip.of.external.machine
并visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
启动visualvm,但没有显示外部机器的进程(只有像visualvm本身的本地进程).此外,有时(但并非总是)我在ssh窗口中收到消息"通道3:打开失败:连接失败:连接被拒绝".
有帮助吗?
ank*_*kon 39
您需要在远程端运行jstatd,或使用host:port指定JMX连接.
Jstatd:
jstatd -J-Djava.security.policy=permissions.txt [-p port]
之后:向目标计算机添加远程连接,并在该远程连接的属性上配置jstatd连接.
(permissions.txt包含例如:
grant {
permission java.security.AllPermission;
};
Run Code Online (Sandbox Code Playgroud)
编辑:( 回答评论)
ssh -D 9696 me@remote
,并在远程命令行上运行如上所述的jstatd.如果希望jstatd位于与默认值1099不同的端口上,请使用jstatd的-p参数.visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
在本地计算机上运行在visual vm中:添加新的远程连接,并指定remote作为主机和jstatd的端口(默认为1099,或者在运行jstatd时使用-p指定的内容)
您现在应该在visualvm中看到远程端的进程
Thi*_*ies 22
我有另一个解决方案使用标准SSH隧道,没有防火墙端口打开.对我来说,SOCKS代理不起作用.
使用以下选项启动JVM:
-Dcom.sun.management.jmxremote = true
-Dcom.sun.management.jmxremote.ssl = false
-Dcom.sun.management.jmxremote.authenticate = false
-Dcom.sun.management.jmxremote.port = [port1]
-D java.rmi.server.hostname = localhost
-Dcom.sun.management.jmxremote.rmi.port = [port2]
重要的部分是"server.hostname = localhost".此外,您明确定义了两个端口(连接+"随机"RMI端口),"jmxremote.rmi.port"至少需要Java 7更新4(我在某处读过,没有检查此信息 - 在您的上使用"lsof -i"服务器机器检查真正使用的端口).
(当然,您可以使用身份验证或SSL.)
通过ssh连接到服务器并将本地port1和port2转发到localhost:port1 | 2作为服务器.
在VisualVM中打开与localhost:port1的JMX连接(没有任何代理设置).
End*_*ios 12
我在localhost上遇到了jstatd绑定的问题,所以我不得不输入
jstatd -J-Djava.security.policy=allPerm.policy -J-Djava.rmi.server.logCalls=true -p <port> -J-Djava.rmi.server.hostname=<my ip>
Run Code Online (Sandbox Code Playgroud)
对于jvisualvm我也使用这个参数
jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<socks-port>
Run Code Online (Sandbox Code Playgroud)
这样,通过ssh代理连接,我可以使用我的远程机器的真实IP地址.
从这个答案窃取我在我的网站上做了一个完整的提醒..我希望你不介意ankon谢谢你的方式:)
sam*_*ben 12
通过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
Run Code Online (Sandbox Code Playgroud)ssh隧道已正确建立
ssh -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011
Run Code Online (Sandbox Code Playgroud)我还发现 jvm 参数:
-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
Run Code Online (Sandbox Code Playgroud)
不适用于我正在使用的 1.3.2 版本。
因此,我使用了工具 > 选项 > 网络并在 SOCKS 设置下手动设置。
但是 VisualVM 仍然没有找到远程进程。然后我删除了 localhost 的“无代理主机”监听,因为这可能阻止了它。