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.jmxremote
args
【参考方案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
将 JMX Exporter 与 Wildfly 15 一起使用时出现 NoClassDefFoundError