2009-08-05 3 views
2

원격 글래스 피쉬 서버를 모니터링하고 싶습니다. domain.xml에서 JMX Connection을 활성화했습니다.jconsole을 사용하여 원격 Glassfish 서버에서 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을 사용하여 서버에 연결할 수 없습니다. 그런 다음 솔루션을 찾았습니다. 원격 연결을 위해 8686 포트를 열려면 domain.xml에 JVM 속성을 지정해야합니다.

<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가 : 자바에서 이는 java.net.URLClassLoader $의 1.run에서 com.sun.enterprise.server.logging.ServerLogManager (URLClassLoader.java:200) .security.Ac sun.misc.Launcher $ AppClassLoader에서 java.lang.ClassLoader.loadClass (ClassLoader.java:307) 에서 java.net.URLClassLoader.findClass (URLClassLoader.java:188) 에서 (기본 방법) cessController.doPrivileged. loadClass (Launcher.java:301) at java.lang.ClassLoader.loadClass (ClassLoader.java:252) at java.util.logging.LogManager $ 1.run (LogManager.java:166) at java.security.AccessController .doPrivileged (기본 방법) java.util.logging.LogManager에서 . (LogManager.java:156) sun.management.snmp에서 java.util.logging.Logger.getLogger (Logger.java:273) 에서 . util.MibLogger (MibLogger.java:57) at sun.management.snmp.u (ConnectorBootstrap.java:760) at sun.management.Agent.startAgent (Agent.java:127) at sun.management. Agent.startAgent (Agent.java:239) javax.management.JMRuntimeException : java.lang.ClassNotFoundException가 : 닷컴 는 MBeanServerBuilder에 클래스 com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder을로드하지 못했습니다 .sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder at javax.management.MBeanServerFactory.checkMBeanServerBuilder (MBeanServerFactory.java:480) at javax.management.MBeanServerFactory.getNewMBeanServerBuilder (MBeanServerFactory. 자바 : javax.management.MBeanServerFactory.createMBeanServer (MBeanServerFactory.java에서 javax.management.MBeanServerFactory.createMBeanServer (MBeanServerFactory.java:213) 에서 javax.management.MBeanServerFactory.newMBeanServer (MBeanServerFactory.java:298) 에서 511) : sun.management.jmxremote.ConnectorBootstrap.initialize에서 java.lang.management.ManagementFactory.getPlatformMBeanServer (ManagementFactory.java:504) 에서 sun.management.ManagementFactory.createPlatformMBeanServer (ManagementFactory.java:302) (ConnectorBootstrap에서 174) . 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.sun.misc.Launcher $ AppClassLoader.loadClass에서 doPrivileged의 (기본 방법) java.net.URLClassLoader.findClass (URLClassLoader.java:188)에서 java.lang.ClassLoader.loadClass (ClassLoader.java:307)에서 (Launcher.java:301) javax.management.MBeanServerFactory.checkMBeanServerBuilder에서 javax.management.MBeanServerFactory.loadBuilderClass (MBeanServerFactory.java:423) 에서 java.lang.ClassLoader.loadClass (ClassLoader.java:252) 에서 (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

+0

즉석에서 사용하던 것과 동일하게 유지한다는 의미입니다. JMX 설정이 존재하는 경우 - JMX 설정을 추가하지 마십시오. – Pavel

2

내가 글래스 피시와 그 JMX를 확인하기 위해 다음과 같은 옵션을 설정 결국 방화벽 친절 :

<jvm-options>-Dcom.sun.aas.jconsole.server.cbport=XXXX</jvm-options> 
XXXX는 응용 프로그램 서버 구성 JMX 포트 번호와 함께 방화벽에서 사용하는 포트 번호입니다

(보통 8686).

자세한 내용은 this blogpost을 참조하십시오. 이 기능을 사용하려면 최신 버전의 Glassfish가 필요합니다. Glassfish 2.1.1에서 성공적으로 사용했습니다.

2

여전히 신비 동작하지만, 이러한 네 설정은 글래스 피시를 실행하는 JVM에 연결할 수

-Djava.rmi.server.hostname=yourhost 
-Dcom.sun.management.jmxremote.port=8686 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

을 조심 (관리 콘솔에서 domain.xml의에 추가, 다시 시작해야합니다)! 이제는 아무도 jconsole에 연결할 수 있으므로 안전하지 않습니다!

IMO JMX 커넥터를 사용하는 Glassfish 방식이 아닙니다.

단순히 다음 asadmin 명령을 실행 글래스 피시 애플리케이션 서버 내부 응용 프로그램을 실행하는 경우

+0

고마워요. 이것은 정확히 내 컴퓨터의 VM에서 실행중인 glassfish 서버에 원격으로 연결하기 위해 찾고 있던 해답입니다! – Cuga

0

(위는 GF 3.1에서 작동), 당신은 변경 사항을 적용하려면 실행중인 모든 서버를 다시 시작해야합니다.

활성화 - 보안 - 관리 ./asadmin

더, 보안을 사용 Connecting remotely to Glassfish through JMX에서 자세한 내용을 볼 수있는 별도의 글래스 피시 서버 구성이 있습니다.

JVM 옵션의 단계를 따라야합니다. 이는 Java 응용 프로그램의 일반적인 지침입니다. Glassfish 응용 프로그램 서버로 실행되는 Java 응용 프로그램의 경우 단순히 asadm 명령을 사용하십시오. 그 때문에 많은 시간을 절약 할 수있었습니다!

** Glassfish는 JVM 옵션을 사용한 설정만으로 위의 런타임 예외로 시작하지 못합니다. ** GF3.1.2 이상 및 Java 7을 사용 중입니다.

관련 문제