JConsole 远程连接到 JBoss EAP

Posted

技术标签:

【中文标题】JConsole 远程连接到 JBoss EAP【英文标题】:JConsole remote connection to JBoss EAP 【发布时间】:2014-09-22 15:43:45 【问题描述】:

我正在尝试连接到在服务器上运行的远程 jboss 实例。我正在使用以下连接 URL

服务:jmx:remoting-jmx://90.214.64.170:9999

当我这样做时,我在控制台窗口中收到以下 2 个错误

选择不安全后,我会看到这个

我有,在通过 jconsole 连接之前,还转到我的 jboss 服务器的 bin 目录并运行./jconsole.sh,它将以下内容输出到命令行

CLASSPATH /usr/bin/java/jdk1.8.0_11/lib/jconsole.jar:/usr/bin/java/jdk1.8.0_11/lib/tools.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/remoting-jmx/main/remoting-jmx-1.1.2.Final-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/remoting3/main/jboss-remoting-3.2.18.GA-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/logging/main/jboss-logging-3.1.2.GA-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/xnio/main/xnio-api-3.0.7.GA-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/xnio/nio/main/xnio-nio-3.0.7.GA-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/sasl/main/jboss-sasl-1.0.3.Final-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/marshalling/main/jboss-marshalling-1.4.2.Final-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/marshalling/river/main/jboss-marshalling-river-1.4.2.Final-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/as/cli/main/jboss-as-cli-7.3.0.Final-redhat-14.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/staxmapper/main/staxmapper-1.1.0.Final-redhat-2.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/as/protocol/main/jboss-as-protocol-7.3.0.Final-redhat-14.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/dmr/main/jboss-dmr-1.2.0.Final-redhat-1.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/as/controller-client/main/jboss-as-controller-client-7.3.0.Final-redhat-14.jar:/var/opt/jboss/modules/system/layers/base/org/jboss/threads/main/jboss-threads-2.1.1.Final-redhat-1.jar

我不确定我还能尝试什么(也打开了端口 9999)来让它工作,有没有人有任何建议或提示可以帮助解决这个问题?

谢谢

编辑

已将我的standalone.conf 文件修改为此

#
# Specify options to pass to the Java VM.
#
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true"
   JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999"
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
else
   echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
fi

我仍然无法连接 - 出现与上述相同的错误

【问题讨论】:

您是否在 JBoss 中设置了适当的 JVM 参数以允许其连接? 我没有 - 这些是哪些参数? 我能想到的有 4 个:-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=[some port number]-Dcom.sun.management.jmxremote.ssl=[true or false]-Dcom.sun.management.jmxremote.authenticate=[true or false]。这些需要包含在您的 JAVA_OPTS 中,并适当设置它们的值。 啊,非常感谢 - 你能给我一个提示,为第一个选项提供什么?其他 3 个是不言自明的 :) 您可以使用-debug 参数启动JConsole,这可能会导致它吐出一些有关连接失败原因的更详细信息。 This Oracle blog 有一些您可以遵循的其他故障排除步骤。 【参考方案1】:

按照下面提到的说明在 JBoss 中启用远程 JMX 监控

JBoss 4.2.3.GA

修改 JBoss 的 bin 目录下的 run.conf 文件并添加以下行-

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=<PORT>"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver"
JAVA_OPTS="$JAVA_OPTS -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl"

JBoss 5.1.0.GA

由于 JBoss 中存在的错误 (https://issues.jboss.org/browse/JBAS-6185) 已在 JBoss 6.0 版本中修复,因此无法在 JBoss 5.1 中配置 JMX 端口。

JBoss 6.1.0.Final

修改 JBoss 的 bin 目录下的 run.conf 文件并添加以下行-

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
JAVA_ARGS="$JAVA_OPTS -Dorg.jboss.logging.Logger.pluginClass=org.jboss.logging.logmanager.LoggerPluginImpl"
JBOSS_CLASSPATH="../lib/jboss-logmanager.jar"

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=<PORT>"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver"
JAVA_OPTS="$JAVA_OPTS -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl"
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=<IP_ADDRESS>"

JBoss 7.1.1.Final

修改JBoss的bin目录下的standalone.conf文件并添加以下行-

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=<PORT>"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver"
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=<IP_ADDRESS>"
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:../modules/org/jboss/logmanager/main/jboss-logmanager-1.2.2.GA.jar  -Xbootclasspath/p:../modules/org/jboss/logmanager/log4j/main/jboss-logmanager-log4j-1.0.0.GA.jar -Xbootclasspath/p:../modules/org/apache/log4j/main/log4j-1.2.16.jar"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.logmanager"

注意:修改并根据您的要求。

参考:

https://community.jboss.org/wiki/JBossMBeansInJConsole

http://abh1sh3k.blogspot.in/2013/12/jmx-configuration-in-different-versions.html

【讨论】:

我需要这些以及原始帖子中的其他内容还是仅需要这些? 如果我添加两者的组合,我会收到以下错误Exception thrown by the agent : javax.management.JMRuntimeException: Failed to load MBeanServerBuilder class org.jboss.system.server.jmx.MBeanServerBuilderImpl: java.lang.ClassNotFoundException: org.jboss.system.server.jmx.MBeanServerBuilderImpl 将这些与其他参数一起添加。您是否添加了您的 IP 地址而不是 是 - 添加了我的 ip 地址代替 - 我添加了与外部 ip 相对的本地主机地址(内部网络 192.168.0.value 上的 ip) 以上都不适用于 EAP 6.2,因为 1) MBeanServerBuilderImpl 不再打包 2) 这些都是非 eap jboss 的设置【参考方案2】:

我找到了答案——至少是一个解决方案。

阅读了新的 JBOSS 发行说明herefor EAP 6.3,我发现以下内容;

恢复的 ServiceMBean Helper 类 org.jboss.as.system-jmx 模块已被引入以恢复可用的辅助类 帮助用户创建 MBean 的早期 JBoss EAP 版本。

我们所做的是部署一个新的独立实例 - 全新安装 6.3,然后按照本指南进行操作;

https://planet.jboss.org/post/jmx_connections_to_jboss_as

我们不需要添加可选参数,不需要修改standalone.sh,也不需要修改standalone.xml。

我看到有人对不正确的答案投了 5 票 - 这是为了奖励赏金吗?!

【讨论】:

啊,过去几天也一直在努力解决这个问题。刚刚将我的安装升级到 6.3 并按照您发布的指南进行操作。 JConsole 现在似乎工作正常!谢谢。【参考方案3】:

好的...这对我来说确实是一个问题,并且对您来说很重要的是,如果您在不同的机器上安装了 JConsole 和 JBoss,Java 附带的 JConsole 将不起作用.. . 你必须在你有 JConsole 的机器上下载 JBoss 的副本,然后在 bin 文件夹中查找 jconsole.bat 文件。

我从这里拿的:http://www.java-redefined.com/2014/02/jboss-7-with-jconsole.html

【讨论】:

【参考方案4】:

我相信对于远程连接,您必须创建一个 Application Realm 用户(使用 add-user.sh。我对是否将其用于远程服务器连接或 EJB 远程处理用户的问题的回答是肯定的,尽管我是不确定这是绝对必要的)。

然后使用这些凭据连接 jconsole。

我在这方面的经验也与在域模式下运行的 EAP 6.2.4 的远程连接无关。我只能希望与独立服务器的远程连接是相同的。不清楚你在这里使用的是哪个。

我还对其进行了更改,因此我可以通过在 CLI 中发出以下命令来使用端口 4447: /profile=ha/subsystem=jmx/remoting-connector=jmx:add(use-management-endpoint=false)

它不适用于您的问题,因为您使用的是 JDK 8,但我认为需要 JDK 7 或更高版本(对于 jconsole)。

希望这里有帮助!

【讨论】:

【参考方案5】:

JBoss 6.2.0 EAP

要将 JConsole 与 JBoss 6.2 EAP 一起使用,您必须将一些 JAR 添加到类路径中。

/jboss-eap-6.2/bin/client目录中有一个README文件,上面写着:

运行 JCONSOLE:

jconsole -J-Djava.class.path=<PATH TO jconsole.jar>;<PATH TO tools.jar>;<PATH TO jboss-cli-client.jar>

【讨论】:

【参考方案6】:

对于 6.1 版,请确保您已将正确的端口偏移量添加到您的默认端口号,默认为 9999,因此远程进程应该可以使用:

service:jmx:remoting-jmx://90.214.64.170:(offsetnumber+9999)

显然,这已在 6.2 版中得到解决

【讨论】:

以上是关于JConsole 远程连接到 JBoss EAP的主要内容,如果未能解决你的问题,请参考以下文章

jconsole 未检测到 jboss eap 6.1

在 JBoss EAP 6.2 中无法通过 SSL 连接到 SOAP 服务

从 Camel 连接到 JBoss EAP6 上的队列

如何使用 jconsole 远程连接到 Resin 4

如何从 Eclipse 运行和调试 JBoss EAP 6?

JBoss EAP 6.1+ 上的 JDBC 模块