如何激活JMX远程GlassFish服务器上使用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的配置部分:
<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>
但现在当我开始服务器,我收到以下错误:
无法加载日志管理 “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.添加-Djava.rmi.server.hostname = GlassFish中的实例的JVM选项。
其他提示
不过神秘的行为,但这些4个设置,您可以连接到JVM上运行的Glassfish(添加在管理控制台添加到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这不是Glassfish的方式,这是使用JMX连接器。
(以上工作在GF 3.1)
我结束了设置以下选项,以确保与Glassfish的是JMX是防火墙友好:
<jvm-options>-Dcom.sun.aas.jconsole.server.cbport=XXXX</jvm-options>
XXXX是您在防火墙一起与应用服务器配置JMX端口号(通常8686)使用的端口号。
更多在此志文章。请注意,此功能需要Glassfish的较新版本。我已经成功地与Glassfish的2.1.1使用它。
是不是 GlassFish的问题1409 <? / p>
如果运行GlassFish应用服务器中的应用程序,只需运行以下asadmin命令,你就需要重新启动所有正在运行的服务器,以使更改生效。
./的asadmin使安全管理员
有额外Glassfish的服务器配置进一步使安全,多见于远程连接通过JMX GLASSFISH 。
您确实需要遵循JVM选项的步骤,这些都是一般的Java应用程序的指令。对于使用GlassFish应用服务器运行时,简单地使用asadm命令的Java应用程序。救了我很多时间!
**另一个音符,只使用JVM选项的设置,Glassfish的将无法启动与上述运行时异常。 **我使用GF3.1.2及以上,和Java 7。