有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java jps无法连接到远程jstatd

我正在尝试使用jstatd使用jps查询远程JVM,以便最终使用VisualVM监控它

我让jstatd使用以下安全策略运行:

grant codebase "file:${java.home}/../lib/tools.jar" {

    permission java.security.AllPermission;
};

jstatd在64位Linux机器上运行,带有1.6.0_10版本的HotSpot vm。jstatd命令是:

jstatd -J-Djava.security.policy=jstatd.tools.policy -J-Djava.rmi.server.logCalls=true

我正在尝试从Windows7计算机上运行jps。由于防火墙限制,我正在通过SSH隧道将RMI数据传输到我的Windows计算机,因此jps命令行是:

 .\jps.exe -m -l rmi://localhost

当我运行jps时,我在jstatd日志中看到连接尝试,如下所示:

Feb 1, 2011 11:50:34 AM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-127.0.0.1: [127.0.0.1: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(ja   va.lang.String)]

但在jps方面,我得到了以下错误:

Error communicating with remote host: Connection refused to host: 192.168.1.137; nested exception is:
    java.net.ConnectException: Connection refused: connect

根据jstatd日志中列出的连接尝试,我认为jps实际上正在到达主机,但由于某种原因被阻止。是否有一些我已经设置的安全策略或其他设置可以更改,以便让jps从远程jstatd获取统计信息


共 (2) 个答案

  1. # 1 楼答案

    以下是您可以轻松做到这一点的方法

    1. 以这种方式在远程主机中启动ejstatd(从ejstatd文件夹执行):mvn exec:java -Dexec.args="-pr 2000 -ph 2001 -pv 2002"
    2. 打开远程主机上的这3个端口,并使它们对本地计算机可用:200020012002
    3. 在本地计算机上,您可以使用jps<remotehost>替换为远程主机名:jps -m -l rmi://<remotehost>:2000

    免责声明:我是开源ejstatd工具的作者

  2. # 2 楼答案

    我猜您只是在转发RMI注册表端口(1099),但还需要打开另一个端口

    检查远程端的端口

    # netstat -nap | grep jstatd
    
    tcp        0      0 :::1099     :::*       LISTEN      453/jstatd          
    tcp        0      0 :::58204    :::*       LISTEN      453/jstatd          
    

    在这种情况下,您需要转发端口58204和1099