5

我想监控远程 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>

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

无法加载 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)在 java.security.AccessController.doPrivileged(Native Method) 在 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) at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:213) at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:174) at 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。在 java.net.URLClassLoader.findClass(URLClassLoader.java:188) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 的 java.security.AccessController.doPrivileged(Native Method) 运行(URLClassLoader.java:200)在 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

我该如何解决这个问题?

提前致谢。

4

5 回答 5

5

仍然是神秘的行为,但是通过这 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)

于 2011-11-18T04:49:58.177 回答
3

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

于 2009-08-31T07:38:44.563 回答
3

我最终设置了以下选项以确保带有 Glassfish 的 JMX 对防火墙友好:

<jvm-options>-Dcom.sun.aas.jconsole.server.cbport=XXXX</jvm-options>

其中 XXXX 是您在防火墙中使用的端口号以及应用程序服务器配置的 JMX 端口号(通常为 8686)。

在这篇博文中阅读更多内容。请注意,此功能需要更新版本的 Glassfish。我已经成功地将它与 Glassfish 2.1.1 一起使用。

于 2010-03-18T13:42:58.003 回答
0

不是GlassFish 问题 1409吗?

于 2009-08-06T13:51:50.347 回答
0

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

./asadmin 启用-安全-管理员

有额外的 Glassfish 服务器配置可以进一步提高安全性,请参阅通过 JMX 远程连接到 Glassfish中的更多信息。

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

** 另请注意,仅使用 JVM 选项进行设置时,Glassfish 将无法启动并出现上述运行时异常。** 我正在使用 GF3.1.2 及更高版本,以及 Java 7。

于 2015-03-20T22:57:32.300 回答