我想监控远程glassfish服务器。我在domain.xml中启用了JMX Connection:
<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 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:200) 在java.security.AccessController.doPrivileged(Native 方法) 在java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 在java.util.logging.LogManager $ 1.run(LogManager.java:166) 在java.security.AccessController.doPrivileged(Native 方法) 在java.util.logging.LogManager。(LogManager.java:156) 在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) 在sun.management.Agent.startAgent(Agent.java:127) at 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) 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) 在sun.management.Agent.startAgent(Agent.java:127) at 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(Native 方法) 在java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301) at 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
我该如何解决问题?
提前致谢。
答案 0 :(得分:3)
解决问题的步骤是: 1.使用默认设置 2.在GlassFish实例的JVM选项中添加-Djava.rmi.server.hostname =。
答案 1 :(得分:3)
仍然是神秘的行为,但是通过这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)
答案 2 :(得分:2)
我最终设置了以下选项,以确保带有Glassfish的JMX对防火墙友好:
<jvm-options>-Dcom.sun.aas.jconsole.server.cbport=XXXX</jvm-options>
其中XXXX是您在防火墙中使用的端口号以及应用程序服务器配置的JMX端口号(通常为8686)。
在this blogpost中阅读更多内容。请注意,此功能需要较新版本的Glassfish。我已经成功地将它与Glassfish 2.1.1一起使用。
答案 3 :(得分:0)
答案 4 :(得分:0)
如果在Glassfish应用服务器中运行您的应用程序,只需运行以下asadmin命令,您需要重新启动所有正在运行的服务器才能使更改生效。
./ asadmin enable-secure-admin
还有额外的Glassfish服务器配置可以进一步提高安全性,详见Connecting remotely to Glassfish through JMX。
您确实需要遵循JVM选项上的步骤,这些是一般Java应用程序的说明。对于使用Glassfish应用程序服务器运行的Java应用程序,只需使用asadm命令即可。这为我节省了很多时间!
**另一个注意事项,只有使用JVM选项的设置,Glassfish将无法启动上述运行时异常。 **我使用的是GF3.1.2及更高版本,以及Java 7。