java - 如何在远程 Glassfish 服务器上激活 JMX 以使用 jconsole 进行访问?

标签 java glassfish jmx jconsole

我想监控远程 glassfish 服务器。我在 domain.xml 中启用了 JMX 连接:

<jmx-connector accept-all="true" address="0.0.0.0" auth-realm-name="admin-realm" enabled="true" name="system" port="8686" protocol="rmi_jrmp" security-enabled="false">

但这并没有帮助。我仍然无法使用 JConsole 连接到服务器。然后我找到了解决方案——我需要在 domain.xml 中指定 JVM 属性以打开 8686 端口进行远程连接。 所以我将这行添加到 java-config 部分:

<jvm-options>-Dcom.sun.management.jmxremote</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.port=8686</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.local.only=false</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.authenticate=false</jvm-options>

但是现在当我启动服务器时,出现以下错误:

Could not load Logmanager "com.sun.enterprise.server.logging.ServerLogManager" java.lang.ClassNotFoundException: com.sun.enterprise.server.logging.ServerLogManager at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.util.logging.LogManager$1.run(LogManager.java:166) at java.security.AccessController.doPrivileged(Native Method) at java.util.logging.LogManager.(LogManager.java:156) at java.util.logging.Logger.getLogger(Logger.java:273) at sun.management.snmp.util.MibLogger.(MibLogger.java:57) at sun.management.snmp.util.MibLogger.(MibLogger.java:42) at sun.management.jmxremote.ConnectorBootstrap.(ConnectorBootstrap.java:760) at sun.management.Agent.startAgent(Agent.java:127) at sun.management.Agent.startAgent(Agent.java:239) javax.management.JMRuntimeException: Failed to load MBeanServerBuilder class com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder: java.lang.ClassNotFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder at javax.management.MBeanServerFactory.checkMBeanServerBuilder(MBeanServerFactory.java:480) at javax.management.MBeanServerFactory.getNewMBeanServerBuilder(MBeanServerFactory.java:511) at javax.management.MBeanServerFactory.newMBeanServer(MBeanServerFactory.java:298) at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:213) at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:174) at sun.management.ManagementFactory.createPlatformMBeanServer(ManagementFactory.java:302) at java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:504) at sun.management.jmxremote.ConnectorBootstrap.initialize(ConnectorBootstrap.java:392) at sun.management.Agent.startAgent(Agent.java:127) at sun.management.Agent.startAgent(Agent.java:239) Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at javax.management.MBeanServerFactory.loadBuilderClass(MBeanServerFactory.java:423) at javax.management.MBeanServerFactory.checkMBeanServerBuilder(MBeanServerFactory.java:465) ... 9 more Exception thrown by the agent : javax.management.JMRuntimeException: Failed to load MBeanServerBuilder class com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder: java.lang.ClassNotFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder

我该如何解决这个问题?

提前致谢。

最佳答案

仍然是神秘的行为,但是通过这 4 个设置,您可以连接到运行 Glassfish 的 JVM(添加到管理控制台中的 domain.xml,需要重新启动)

-Djava.rmi.server.hostname=yourhost
-Dcom.sun.management.jmxremote.port=8686
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

小心!这不安全,因为现在任何人都可以将 jconsole 连接到它!

IMO 这不是使用 JMX 连接器的 Glassfish 方式。

(以上适用于 GF 3.1)

关于java - 如何在远程 Glassfish 服务器上激活 JMX 以使用 jconsole 进行访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1231868/

相关文章:

maven - HelloWorld EJB 依赖注入(inject)

glassfish - JPA 2.0中当前事务中执行一些任意sql

java - JMX 字段和方法的描述 JBoss

java - Spring 4 + Hibernate 4 集成。表不会自动创建

java - 当 WSDL 太大时,JAX-WS 客户端挂起 30 秒

java - 如何为 NetBeans Java Web App 项目向 Ant 添加 jar 文件以便构建它?

java - 抽象或带注释的类而不是接口(interface)作为 MXBean

java - 卡夫卡连接。如何为连接器启用 jmx 指标

java - 按下确定按钮后,Android 相机 Activity 不会返回到我的应用程序

java - 使用 Eclipse 声明编译和运行时之间的暂时依赖关系的最佳方法是什么?