Wildfly 17 在同一服务器上启用 JMX 远程会导致 logmanager 错误

Posted

技术标签:

【中文标题】Wildfly 17 在同一服务器上启用 JMX 远程会导致 logmanager 错误【英文标题】:Wildfly 17 enabling JMX remote on the same server gives logmanager errors 【发布时间】:2020-09-19 06:00:01 【问题描述】:

我希望启用 JMX 以允许 datadog 监控我们的 java JBoss wildfly 系统,但不断遇到运行时错误

我已经用

设置了standalone.xml
<subsystem xmlns="urn:jboss:domain:jmx:1.3">              
            <expose-resolved-model/>                     
            <expose-expression-model/>                           
            <remoting-connector use-management-endpoint="true"/>                       
</subsystem>

<interfaces>
    <interface name="management">
    <inet-address value="$jboss.bind.address.management:127.0.0.1"/>
</interface>

还有

<socket-binding name="management-http" interface="management" port="$jboss.management.http.port:9990"/>

然后在我的 startup.sh 中我添加了

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"

但这给了我

java.lang.IllegalStateException:LogManager 不正确 已安装(必须设置“java.util.logging.manager”系统 属性为“org.jboss.logmanage r.LogManager”)

如果我在此处和在 google 上查看,这似乎相当普遍,但根据 Wildfly 的版本,似乎有不同的解决方案。

我想我需要做一些类似的事情 在standalone.conf开始处设置

JBOSS_MODULES_SYSTEM_PKGS="org.jboss.logmanager"

然后

JBOSS_HOME="/opt/wildfly"
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.1.11.Final.jar -Xbootclasspath/p:$JBOSS_HOME/modules/system/layers/base/org/jboss/log4j/logmanager/main/log4j-jboss-logmanager-1.2.0.Final.jar"

最后。

但我仍然收到错误“无法加载 Logmanager "org.jboss.logmanager.LogManager"”

任何建议将不胜感激。

【问题讨论】:

您不需要com.sun.management.jmxremote 或将日志管理器添加到引导类路径。您需要将管理接口公开给远程 IP 地址。也就是说,您不应该将 -Xbootclasspath/p 定义两次。 你有解决办法吗? WildFly服务器管理端点默认开启远程JMX,无需添加-Dcom.sun.management.jmxremoteargs 【参考方案1】:

在 bin 中使用提供的 jconsole.sh 脚本,不要尝试手动构建类路径。您还需要使用自定义服务 url。有关详细信息,请参阅文档

【讨论】:

【参考方案2】:

我在将 Wildfly 服务器版本从 10.1 升级到 24.0.0 时遇到了同样的问题,我使用以下更改解决了它。

需要在standalone.conf文件末尾添加以下JAVA_OPTS更改

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/a:$JBOSS_HOME/modules/system/layers/base/org/wildfly/common/main/wildfly-common-1.5.4.Final.jar -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager -Xbootclasspath/a:$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.1.18.Final.jar  -Xbootclasspath/a:$JBOSS_HOME/modules/system/layers/base/org/jboss/log4j/logmanager/main/log4j-jboss-logmanager-1.2.0.Final.jar"

# Enable jmx remote management
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=4447 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false  -Dsun.util.logging.disableCallerCheck=true  -Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote.local.only=false"

注意: wildfly-common-.jar、jboss-logmanager-.jar、log4j-jboss-logmanager-.jar 依赖项应该使用-Xbootclasspath/a添加到类路径中

【讨论】:

以上是关于Wildfly 17 在同一服务器上启用 JMX 远程会导致 logmanager 错误的主要内容,如果未能解决你的问题,请参考以下文章

在Wildfly上的Startup bean中通过JMX进行AttributeNotFoundException

如何打开 Wildfly 8.2 JMX 端口进行监控?

将 JMX Exporter 与 Wildfly 15 一起使用时出现 NoClassDefFoundError

Wildfly 8.2.0通过RMI公开JMX

修改jmx远程监控wildfly/jboss配置,然后通过jdk自带的visualvm工具来进行性能监控

如何在同一台机器上运行 2 个(或更多)Wildfly 实例?