【问题标题】:Connect JVisualVM to a Remote Wildfly Instance?将 JVisualVM 连接到远程 Wildfly 实例?
【发布时间】:2016-08-25 02:53:33
【问题描述】:

我正在尝试将在我的本地计算机上运行的 JVisualVM 连接到运行 WildFly 服务器(具体来说是版本 8.1.0)的远程计算机。

我自己没有配置 WildFly 服务器,我不知道是谁做的,但我知道我可以通过将浏览器指向以下位置从本地计算机以管理用户身份登录:

https://[ip address of the remote machine]:9443/console

请注意,它是https,而不是普通的http,并且它的端口已设置为9443(我认为默认是8080或9990之类的...... .IDK,我在网上看到很多端口号。有人明确告诉我,这个WildFly服务器禁用了http)。

我可以通过 SSH 连接到远程机器。我可以导航到 WildFly 的 bin 目录并运行 jboss-client.sh。我必须在端口 9999 上连接(我认为默认是 9990?)

我将jboss-client.jar(在bin/client 下)复制到我的本地计算机并从命令行运行JVisualVM,如下所示:

.\jvisualvm.exe -cp:a C:\[path to]\jboss-client.jar

它启动正常。 File > Add Remote Host:然后我输入了IP。 OK。我在树中的 Remote 下右键单击它并选择了Add JMX Connection。我进入了

service:jmx:http-remoting-jmx://[ip]:9999

我勾选了我想使用安全凭证并输入了用户名和密码。选中以保存安全凭据。未选中“不需要 SSL 连接”。点击OK。它立即吐出消息

无法使用service:jmx:http-remoting-jmx://[ip]:9999 连接到admin@service:jmx:http-remoting-jmx://[ip]:9999

我还尝试了端口 9443、9990 和 8080。这些都没有奏效。我在协议名称中尝试了 https 而不是 http。那也没用。

我错过了什么?我怎么可以访问控制台,并与 jboss-client.sh 连接,但我不能使用 JVisualVM?是否有一些我可以在某处使用的日志来查看问题所在?也许有人可以指出我在某处遗漏的配置?

不确定它是否重要,但我的本地计算机正在运行安装了 JDK8 的 Windows 10。 WildFly 服务器在 CentOS 6.3 上使用 Java 6。

【问题讨论】:

  • 您运行的是 WildFly 还是 JBoss EAP 6? WildFly 8+ 是 Java EE 7 容器,需要 Java 7+。
  • @JamesR.Perkins - 服务器肯定在运行 WildFly 8.1.0。我会检查 Java 版本,但我很确定它是 6...
  • @JamesR.Perkins - 好的。事实证明,Java 6 和 Java 8 都安装在服务器上。 WildFly 8.1.0 正在使用 Java 8 安装...我不确定为什么服务器还单独安装了 Java 6。无论如何,希望澄清对您有所帮助。 :)
  • 管理端口是否在侦听可访问的 IP?例如,您可以使用 CLI 连接吗? FWIW 端口 9990 是 WildFly 的默认管理端口。
  • @JamesR.Perkins - 是的,我可以将 CLI 从我的本地 Windows 机器连接到远程服务器的端口 9999。此外,我可以在远程服务器上运行 JVisualVM 并让它连接到它自己的 Wildfly 实例。这对我来说可能已经足够好了......让它远程运行会更好,但如果这是我能做的最好的......也许我可以忍受吗?

标签: java wildfly visualvm jvisualvm


【解决方案1】:

我不知道其他人是否也(仍然)遇到同样的问题(远程机器上的 Wildfly10,其中管理控制台可在 9443 使用 HTTPS)。以下对我有用。

对于 ssh 连接:

  1. 以 jboss-client.jar 开头 jvisualvm
jvisualvm --cp:a @JBOSS_HOME/bin/client/jboss-client.jar
  1. 使用以下连接字符串:
service:jmx:remote+https://remote-server:9443

注意:我在这里使用remote+https

  1. 提供用户名和密码

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    在 \lib\visualvm\platform\lib 下包含 jboss-cli-client.jar 和 jboss-client.jar 并重新启动 jvisualvm 以获取新的 jar。

    【讨论】:

      【解决方案3】:

      您错过了在远程主机中运行 jstatd 命令, 这个小程序是 RMI 服务器,尽管您使用 jmx 连接,但它可能会从客户端连接到远程主机,它使用 jmxrmi 协议进行该连接。

      首先在远程主机中创建文件名作为security.policy,其中包含:

      grant codebase "file:${java.home}/../lib/tools.jar" {
      permission java.security.AllPermission;
      };
      

      当然,你必须在 linux 的文件部分放置显式路径,然后在创建此文件时将其放入 jdk.home 的 bin 目录中

      那么你应该在远程主机上运行这个命令 $JAVA_HOME/bin/jstatd -J-Djava.security.policy=/security.policy的路径-J-Djava.rmi.server.hostname=远程IP地址-J-Djava.net.preferIPv4Stack=true 那么您可以使用正确的设置连接到服务器。

      【讨论】:

        【解决方案4】:

        您需要将jboss-client.jar(或jboss-cli-client.jar)添加到JVisualVM 的类路径中。该库可以在 WildFly 安装的 bin/client 目录中找到。

        我使用以下命令将库添加到类路径中。

        jvisualvm --cp:a ~/servers/wildfly-10.0.0.Final/bin/client/jboss-client.jar
        

        然后我使用service:jmx:remote+http://[ip]:[port] 并能够连接。

        【讨论】:

        • 哇,这太侮辱人了。我努力编写和格式化我所做的一切,但你不会费心去阅读它。
        • 对不起,这不是侮辱性的。我在我们的命令中注意到了一个区别,可能只是 Windows 与 Linux 的区别,但你使用了-cp,而当我运行帮助时,它使用了--cp。它立即返回的事实似乎表明它找不到协议。至少这是我最好的猜测。
        • 好的,我尝试使用 --cp 而不是 -cp。没有不同。我尝试使用remote+http 而不是http-remoting-jmx。也没有区别。
        • 我不记得了,但是 VisualVM 记录异常吗?立即返回对我来说似乎很可疑。随意加入 freenode IRC #wildfly 或 HipChat hipchat.com/gSW9XYz69。 FWIW http-remoting-jmx 应该可以正常工作。 remote+http 只是它的替代品。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2018-10-24
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        相关资源
        最近更新 更多