将JVisualVM连接到远程Wildfly实例?

5
我正在尝试连接运行在本地机器上的JVisualVM到一个远程机器,该机器正在运行WildFly服务器(具体版本为8.1.0)。
我没有自己配置WildFly服务器,也不知道谁进行了配置,但我知道可以通过将浏览器指向以下地址来作为管理员用户从我的本地机器登录:
https://[ip address of the remote machine]:9443/console

请注意,这是https,而不是普通的http,并且该端口已设置为9443(我认为默认值为8080或9990或其他...我在网上看到了很多端口号。我已被明确告知此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

它可以顺利启动。 文件 > 添加远程主机:然后我输入了IP地址,点击确定。在树形结构的"远程"下,右键单击并选择添加JMX连接。我输入了

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?有没有日志可以用来查看问题所在?也许有人能指出我遗漏的某个配置吗?

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


你正在运行WildFly或JBoss EAP 6吗?WildFly 8+是一个Java EE 7容器,需要Java 7+。 - James R. Perkins
@JamesR.Perkins - 服务器肯定正在运行WildFly 8.1.0。我会检查Java版本,但我很确定它是6... - ArtOfWarfare
@JamesR.Perkins - 好的。事实证明,服务器上安装了Java 6和Java 8。WildFly 8.1.0正在使用Java 8安装...我不确定为什么服务器还单独安装了Java 6。无论如何,希望澄清这一点能帮助你帮助我。 :) - ArtOfWarfare
管理端口是否在可访问的IP上监听?例如,您能否使用CLI连接?顺便说一句,9990端口是WildFly的默认管理端口。 - James R. Perkins
@JamesR.Perkins - 是的,我可以从我的本地Windows机器连接到远程服务器上的CLI,端口号是9999。另外,我也可以在远程服务器上运行JVisualVM,并使其连接到其自己的Wildfly实例。这可能对我来说已经足够了...虽然最好是让它在远程运行,但如果这是我能做到的最好办法...也许我可以接受这个? - ArtOfWarfare
@ArtOfWarfare 你找到解决方案了吗?我也遇到了同样的问题,尝试了无数建议和配置组合以及连接字符串语法,但迄今为止都没有运气。 - simon
4个回答

7
您需要将 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],并成功连接。


哇,这太侮辱人了。我花了很多心思来编写和格式化我所做的一切,但你却懒得去阅读它。 - ArtOfWarfare
抱歉,这并不是要冒犯您。我注意到我们命令中的一个区别,可能只是Windows和Linux之间的差异,但您使用了“-cp”,而当我运行帮助时,它使用了“--cp”。它立即返回的事实似乎表明它找不到协议。至少这是我最好的猜测。 - James R. Perkins
好的,我尝试使用--cp代替-cp。没有任何不同。我尝试使用remote+http代替http-remoting-jmx。仍然没有任何不同。 - ArtOfWarfare
我记不清了,但是VisualVM是否记录异常呢?立即返回对我来说似乎有点可疑。欢迎加入freenode IRC #wildfly或HipChat https://www.hipchat.com/gSW9XYz69。FWIW http-remoting-jmx应该可以正常工作。remote+http只是它的替代品。 - James R. Perkins

3

我不知道是否还有其他人遇到同样的问题(在远程机器上使用Wildfly10,管理控制台可以通过9443的HTTPS访问)。以下方法适用于我。

对于SSH连接:

  1. 使用jboss-client.jar启动jvisualvm
jvisualvm --cp:a @JBOSS_HOME/bin/client/jboss-client.jar

使用以下连接字符串:
service:jmx:remote+https://remote-server:9443

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

  1. 提供用户名和密码

希望这有所帮助。


0

你错过了在远程主机上运行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=path of /security.policy -J-Djava.rmi.server.hostname=remote ip address -J-Djava.net.preferIPv4Stack=true 然后,你可以使用正确的设置连接到服务器。


0

将 jboss-cli-client.jar 和 jboss-client.jar 放置于 \lib\visualvm\platform\lib 目录下,并重新启动 jvisualvm 以加载新的 jar 包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接