jconsoleでアクセスするために、リモートGlassfishサーバーでJMXをアクティブ化する方法は?

StackOverflow https://stackoverflow.com/questions/1231868

  •  22-07-2019
  •  | 
  •  

質問

リモートの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を使用しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top