2009-08-05 62 views
2

我想監視遠程glassfish服務器。我在domain.xml中啓用了JMX連接:如何激活遠程Glassfish服務器上的JMX以使用jconsole進行訪問?

<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.Ac cessController.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 (LogManager.java:156) (位於sun.management.snmp處)。 util.MibLogger。(MibLogger.java:57) at sun.management.snmp.u til.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 at javax.management.MBeanServerFactory.checkMBeanServerBuilder(MBeanServerFactory.java:480) at 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) at sun.management.Agent.startAgent(Agent.java:127) at sun.management.Agent.startAgent(Agent.java:239) 引起者: java.lang.ClassN otFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder at java.net.URLClassLoader $ 1.run(URLClassLoader.java:200) at 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

我怎樣才能解決這個問題?

在此先感謝。

回答

3

解決該問題的步驟如下: 1.使用默認設置 2.在GlassFish實例的JVM選項中添加-Djava.rmi.server.hostname =。

+0

只是要確定:第一步 - 是否需要從JVM選項中刪除所有com.sun.management.jmxremote設置? – tronda 2010-03-18 12:24:20

+0

這意味着保持它們與開箱即用相同。如果JMX設置存在 - 讓他們成爲,如果他們不 - 不要添加它們。 – Pavel 2010-03-19 10:28:02

0

是不是GlassFish issue 1409

+0

不是。另外,我正在使用GF v2.1(9.1.1)(build b60e-fcs) – Pavel 2009-08-07 06:00:44

2

我結束了設置以下選項,以確保與Glassfish的是JMX是防火牆友好:

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

,其中xxxx是您在防火牆一起使用的應用程序服務器配置JMX端口號,使用的端口號(通常8686)。

瞭解更多this blogpost。請注意,此功能需要較新版本的Glassfish。我已經成功地將它與Glassfish 2.1.1一起使用。

2

還有神祕的行爲,但這些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)

0

如果運行GlassFish應用服務器中的應用程序,只需運行以下asadmin命令,你就需要重新啓動所有正在運行的服務器,以使更改生效。

./asadmin使安全管理員

有額外的GlassFish服務器配置,進一步實現安全性,多見於Connecting remotely to Glassfish through JMX

您確實需要遵循JVM選項上的步驟,這些是針對Java應用程序的一般說明。對於使用Glassfish應用程序服務器運行的Java應用程序,只需使用asadm命令即可。這爲我節省了很多時間!

**另一個說明,只有使用JVM選項的設置,Glassfish將無法啓動上述運行時異常。 **我正在使用GF3.1.2及以上版本和Java 7.

相關問題