JConsole远程连接JBoss EAP

6

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

service:jmx:remoting-jmx://90.214.64.170:9999

当我这样做时,在控制台窗口中会出现以下2个错误:

enter image description here

选择不安全选项后,我看到了下面的界面:

enter image description here

在通过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

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

1
你在JBoss中设置了适当的JVM参数以允许连接吗? - JonK
我能想到4个:-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=[一些端口号]-Dcom.sun.management.jmxremote.ssl=[true或false]-Dcom.sun.management.jmxremote.authenticate=[true或false]。这些需要包含在您的JAVA_OPTS中,并适当设置其值。 - JonK
啊,太完美了,谢谢!你能给我一个提示,第一个选项应该提供什么吗?其他三个选项都很明显 :) - Biscuit128
第一个没有价值,保持原样就好。 - JonK
1
你可以使用“-debug”参数启动JConsole,这可能会导致它输出一些关于连接失败原因的更详细信息。这篇Oracle博客提供了其他一些你可以遵循的故障排除步骤。 - JonK
显示剩余3条评论
6个回答

14

按照以下说明启用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存在一个已在JBoss 6.0版本中得到修复的错误(https://issues.jboss.org/browse/JBAS-6185),因此在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"

注意:根据您的要求修改<management-interfaces><native-management-interface>

参考资料:

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

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


我需要在原帖中同时使用这些和其他的吗?还是只需要这些? - Biscuit128
如果我同时添加两者的组合,会出现以下错误 代理程序抛出异常:javax.management.JMRuntimeException: 无法加载 MBeanServerBuilder 类 org.jboss.system.server.jmx.MBeanServerBuilderImpl: java.lang.ClassNotFoundException: org.jboss.system.server.jmx.MBeanServerBuilderImpl - Biscuit128
将这些参数与其他参数添加。你是否将你的IP地址添加到<主机IP>中了? - SANN3
是的 - 我将我的 IP 地址添加到了 <host ip> 的位置 - 我添加了我的本地主机地址(内部网络上的 IP 192.168.0.value),而不是外部 IP。 - Biscuit128
我也遇到了那个异常。但是在添加这些参数后,它就可以工作了。对于@ashokramcse也有效,我想。但是我正在使用JBoss 4.0。 - SANN3
2
以上内容均不适用于EAP 6.2,因为1)MBeanServerBuilderImpl不再打包,2)这些都是非EAP JBoss的设置。 - Biscuit128

5

好的...这对我来说真的是个问题,而且很重要的一点是,如果您在不同的机器上拥有JConsole和JBoss,则附带Java的JConsole将无法正常工作...您必须在拥有JConsole的机器上下载JBoss的副本,并在bin文件夹中查找jconsole.bat文件。

我从这里获取了信息:http://www.java-redefined.com/2014/02/jboss-7-with-jconsole.html


5
我找到了答案-至少是一个解决方案。
通过阅读新的JBOSS发布说明,EAP 6.3版本的说明,我发现以下内容;
引用如下: 恢复的ServiceMBean助手类 org.jboss.as.system-jmx模块已被引入以恢复早期版本中可用于帮助用户创建MBeans的助手类。
我们所做的是部署一个新的独立实例-干净的6.3安装,并按照这个指南进行操作; https://planet.jboss.org/post/jmx_connections_to_jboss_as 我们不需要添加任何可选参数,也不需要修改standalone.sh和standalone.xml。
我看到有人的错误答案获得了5个赞成票-这只是为了奖励吗?!

啊,我也为这个问题苦苦挣扎了几天。我刚把我的安装升级到6.3,并按照你发布的指南进行操作。现在JConsole似乎正常工作了!谢谢。 - mchinaloy

0

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

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

显然,这个问题在6.2版本中得到了解决。


0

JBoss 6.2.0 EAP

要在 JBoss 6.2 EAP 中使用 JConsole,您必须将一些 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>

0

我认为对于远程连接,您需要创建一个应用程序领域用户(使用add-user.sh)。我回答了这个问题,即是否将其用于远程服务器连接或EJB远程用户,尽管我不确定这是绝对必要的。

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

我的经验也仅限于远程连接到在域模式下运行的EAP 6.2.4。我只能希望远程连接到独立服务器会是相同的。不清楚您在这里使用的是哪个。

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

由于您似乎正在使用JDK 8,因此它与您的问题无关,但我认为需要JDK 7或更高版本(用于jconsole)。

希望这里的某些内容有所帮助!


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