jconsoleでアクセスするために、リモートGlassfishサーバーでJMXをアクティブ化する方法は?
質問
リモートの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をロードできませんでした &quot; com.sun.enterprise.server.logging.ServerLogManager&quot; 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) 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(Nativeで 方法) 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(Nativeで 方法) 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.AppServerMBeanSe
解決
問題を解決する手順は次のとおりです。 1.デフォルト設定を使用する 2. GlassFishのインスタンスのJVMオプションに-Djava.rmi.server.hostname =を追加します。
他のヒント
まだ神秘的な動作ですが、これら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これは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アプリサーバー内でアプリケーションを実行する場合は、次のasadminコマンドを実行するだけで、実行中のすべてのサーバーを再起動して変更を有効にする必要があります。
./ asadmin enable-secure-admin
セキュリティをさらに有効にするための追加のGlassfishサーバー構成があります。詳細については、 JMXを介してGlassfishにリモート接続する。
JVMオプションの手順に従う必要があります。これらは一般的なJavaアプリケーションの手順です。 Glassfishアプリケーションサーバーで実行されるJavaアプリケーションの場合、asadmコマンドを使用するだけです。それは多くの時間を節約しました!
** JVMオプションを使用する設定のみでは、Glassfishは上記のランタイム例外で起動に失敗します。 ** GF3.1.2以上とJava 7を使用しています。