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

Java 如何在远程Glassfish服务器上激活JMX,以便使用jconsole进行访问?,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连接到服务器。然后我找

我想监控远程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>
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8686
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
但现在,当我启动服务器时,会出现以下错误:

无法加载日志管理器 “com.sun.enterprise.server.logging.ServerLogManager” java.lang.ClassNotFoundException: com.sun.enterprise.server.logging.ServerLogManager 在java.net.URLClassLoader$1.run(URLClassLoader.java:200) 位于java.security.AccessController.doPrivileged(本机 (方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:188) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:307) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:252) 在java.util.logging.LogManager$1.run(LogManager.java:166) 位于java.security.AccessController.doPrivileged(本机 (方法) 位于java.util.logging.LogManager。(LogManager.java:156) 位于java.util.logging.Logger.getLogger(Logger.java:273) 位于sun.management.snmp.util.MibLogger.(MibLogger.java:57) 位于sun.management.snmp.util.MibLogger.(MibLogger.java:42) 位于sun.management.jmxremote.ConnectorBootstrap.(ConnectorBootstrap.java:760) 位于sun.management.Agent.startAgent(Agent.java:127) 位于sun.management.Agent.startAgent(Agent.java:239) javax.management.JMRuntimeException: 未能加载MBeanServerBuilder 班 com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder: java.lang.ClassNotFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder 位于javax.management.MBeanServerFactory.checkMBeanServerBuilder(MBeanServerFactory.java:480) 位于javax.management.MBeanServerFactory.getNewMBeanServerBuilder(MBeanServerFactory.java:511) 位于javax.management.MBeanServerFactory.newMBeanServer(MBeanServerFactory.java:298) 位于javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:213) 位于javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:174) 位于sun.management.ManagementFactory.createPlatformMBeanServer(ManagementFactory.java:302) 位于java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:504) 在sun.management.jmxremote.ConnectorBootstrap.initialize(ConnectorBootstrap.java:392)中 位于sun.management.Agent.startAgent(Agent.java:127) 位于sun.management.Agent.startAgent(Agent.java:239) 原因: java.lang.ClassNotFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder 在java.net.URLClassLoader$1.run(URLClassLoader.java:200) 位于java.security.AccessController.doPrivileged(本机 (方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:188) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:307) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:252) 位于javax.management.MBeanServerFactory.loadBuilderClass(MBeanServerFactory.java:423) 位于javax.management.MBeanServerFactory.checkMBeanServerBuilder(MBeanServerFactory.java:465) ... 9代理程序引发的其他异常: javax.management.JMRuntimeException: 未能加载MBeanServerBuilder 班 com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder: java.lang.ClassNotFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder

我怎样才能解决这个问题


提前感谢。

不是吗?

解决问题的步骤如下: 1.使用默认设置
2.在GlassFish实例的JVM选项中添加-Djava.rmi.server.hostname=。

我最后设置了以下选项,以确保使用GlassFish的JMX对防火墙友好:

<jvm-options>-Dcom.sun.aas.jconsole.server.cbport=XXXX</jvm-options>
-Dcom.sun.aas.jconsole.server.cbport=XXXX
其中XXXX是防火墙中使用的端口号,以及应用服务器配置的JMX端口号(通常为8686)


阅读更多信息。请注意,此功能需要更新版本的Glassfish。我已经成功地将它用于Glassfish 2.1.1。

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

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

在我看来,这不是Glassfish的方式,它使用的是JMX连接器


(以上在GF 3.1中适用)

如果在Glassfish应用程序服务器中运行应用程序,只需运行以下asadmin命令,您需要重新启动所有正在运行的服务器,更改才能生效

/asadmin启用安全管理

有额外的Glassfish服务器配置来进一步启用安全性,请参阅

您确实需要遵循JVM选项的步骤,这些是Java应用程序的一般说明。对于使用Glassfish应用服务器运行的Java应用程序,只需使用asadm命令。这节省了我很多时间

**另一个注意事项是,只有使用JVM选项的设置,Glassfish将无法启动上述运行时异常。
**我使用的是GF3.1.2及以上版本和Java 7。

不,不是。此外,我正在使用GF v2.1(9.1.1)(构建b60e fcs)只是为了确保:第一步——做到了吗
-Djava.rmi.server.hostname=yourhost
-Dcom.sun.management.jmxremote.port=8686
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false