【问题标题】:jps can't connect to a remote jstatdjps 无法连接到远程 jstatd
【发布时间】:2011-06-19 10:27:03
【问题描述】:

我正在尝试使用 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 虚拟机。 jstatd 命令是:

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

我正在尝试从 Windows 7 机器运行 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 中提取统计信息?

【问题讨论】:

标签: java monitoring


【解决方案1】:

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

检查远程端有哪些端口

# netstat -nap | grep jstatd

tcp        0      0 :::1099     :::*       LISTEN      453/jstatd          
tcp        0      0 :::58204    :::*       LISTEN      453/jstatd          

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

【讨论】:

  • 不,这没有帮助。我通过隧道连接到另一个端口,在我的例子中是 45998,但 jps 仍然无法连接。
  • 隧道没有帮助,但打开更多端口有帮助。你是对的。谢谢。
  • @afrosteve:你能解释一下你打开了哪些其他端口以及你使用了哪个端口?
【解决方案2】:

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

  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 工具的作者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 2016-06-29
    • 2015-01-03
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多