2

JConsole を使用して、リモート マシンで実行されている weblogic サーバーを監視する必要があります。ちょうど今のところ、試している間、自分のマシンですべてをテストしています。つまり、自分のマシンでリモートで動作させようとしています。これが機能したら、サーバーで必要な変更を行いますが、アプリケーションはサーバーは他のユーザーに使用されています。変更を行ったり、サーバーを頻繁に停止/開始したりすることができません。そのため、私は自分の PC をサーバーとして使用し、JConsole を使用して「リモートで」接続しています。

環境: PC とサーバーの両方が WL 10.3 で実行されています。サーバーは Java Sun JDK 1.6.0_27 および Solaris OS で実行されており、私の PC は Java Sun JDK 1.6.0_26 および Ubuntu OS で実行されています。

JConsole を実行し、weblogic プロセスをクリックして、ローカルに接続できます。

アプリケーションの展開はかなり大規模で、いくつかのスクリプトを実行します。weblogic のドメインが作成されたら、次のプロパティを設定します。

java -classpath ${CLASSPATH} ${MY_OPTS} -Dweblogic.management.username=${ADMIN_USER}  \
    -Dweblogic.management.password=${ADMIN_PASSWD} -Dweblogic.Domain=${MY_DOMAIN} \
    -Dweblogic.Name=${MY_SERVER} -Dweblogic.ListenPort=${MY_PORT} \
    -Dweblogic.RootDirectory=${MY_DOMAIN_HOME}/${MY_DOMAIN} \
    -Dcom.sun.management.jmxremote.port=22222 \
    -Dcom.sun.management.jmxremote.authenticate=true \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.password.file=/home/MY_USER/jmxremote.password \
    -Dcom.sun.management.jmxremote.access.file=/home/MY_USER/jmxremote.access \
    -Dweblogic.management.GenerateDefaultConfig=true weblogic.Server &

また、ある時点でこのプロパティを追加します -Djava.rmi.server.hostname= --> localhost も 127.0.0.1 も使用していませんが、違いはありませんでした

次に、コンソールから jconsole -debug を実行し、次のサービス URL を使用してリモート オプションで接続を試みます (別のサービスを試します)。

service:jmx:rmi:///jndi/rmi://127.0.0.1:22222/jmxrmi
service:jmx:rmi:///jndi/rmi://<my_ip>:22222/jmxrmi
service:jmx:rmi://127.0.0.1:22222/jndi/rmi://127.0.0.1:1099/

1099 は rmiregistry が実行されるポートですが、rmiregistry & を使用して手動で開始する必要があります。そうしないと、そのポートはリッスンしません。

アプリケーションの実行中に netstat コマンドを実行すると、ポート 8080、8081 (SSL ポート)、および管理コンソールのポート (デフォルトの 7001 ではない) が表示されますが、ポート 22222 がリッスンしていません。私はそうすべきですよね?

weblogic.policy に以下を追加しました。

grant {
permission java.net.SocketPermission
"<my_ip>:1024-65535", "connect,resolve";
};

アプリケーションのデプロイ中にコンソールに次のように表示されます。

Connector Server Address = service:jmx:iiop://<my_ip>:8080    /jndi/weblogic.management.mbeanservers.runtime

コネクタ サーバ アドレス = service:jmx:iiop://:8080/jndi/weblogic.management.mbeanservers.edit

Connector Server Address = service:jmx:rmi://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc0AAtVbmljYXN0UmVmMgAACTEyNy4wLjEuMQAAxMelHYZki5P74FdoVWYAAAEzsm1U1oACAHg=

Conector JMX Ready in: service:jmx:rmi:///jndi/rmi://usuario-System-Product-Name:22222/jmxrmi

私もこれらのものを試してみましたが、うまくいきませんでした。

接続できる唯一の方法は、最初にpidを使用してローカルにアクセスし、コンソールでログに記録されているものと同様のサービスURLを取得することです。

service:jmx:rmi://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc0AAtVbmljYXN0UmVmMgAACTEyNy4wLjEuMQAAgDBSpbjGvIybrBekgUYAAAEzsm9/YIASAHg=

私が接続できるリモートセクションでこのURLを使用すると、ログに記録されたものと似ていますが、同じではなく、動作しません。

-debug を使用したときに JConsole コンソールに表示されるエラーは次のとおりです。

コンソールに表示されるエラーのいくつかは、ランダムではありません.つまり、さまざまな URL を試したり、rmiregistry を手動で実行/実行していないときに、さまざまなエラーが表示されます。

Failed to retrieve RMIServer stub: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

11/11/2011 09:46:46 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://127.0.0.1:22222/jmxrmi] connecting...
11/11/2011 09:46:46 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://127.0.0.1:22222/jmxrmi] finding stub...
11/11/2011 09:46:46 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://127.0.0.1:22222/jmxrmi] Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: 
non-JRMP server at remote endpoint]

Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint]
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint]

17/11/2011 12:08:28 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://<my_ip>:22222/jmxrmi] connecting...
17/11/2011 12:08:28 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://<my_ip>:22222/jmxrmi] finding stub...
17/11/2011 12:08:28 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://<my_ip>:22222/jmxrmi] Failed to retrieve RMIServer stub: javax.naming.NameNotFoundException: jmxrmi
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.NameNotFoundException: jmxrmi
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:340)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
    at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:350)
    at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:296)
    at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:280)
Caused by: javax.naming.NameNotFoundException: jmxrmi
    at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:99)
    at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1888)
    at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1858)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257)
    ... 4 more

注:私が使用したときは、172.xx.xxx.xxxを意味しています

私は何を間違っていますか?他に何を設定/確認/変更する必要がありますか?


さて、いくつかの変更を加えましたが、まだ機能させることができません。

私は

java -classpath ${CLASSPATH} ${MY_OPTS} -Dweblogic.management.username=${ADMIN_USER} \ -Dweblogic.management.password=${ADMIN_PASSWD} -Dweblogic.Domain=${MY_DOMAIN} \ -Dweblogic.Name=${MY_SERVER} -Dweblogic.ListenPort=${MY_PORT} \ -Dweblogic.RootDirectory=${MY_DOMAIN_HOME}/${MY_DOMAIN} \ -Djava.rmi.server.hostname=${ADMIN_HOST} \ -Dcom.sun.management.jmxremote.port=22222 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.password.file=/home/MY_USER/jmxremote.password \ -Dcom.sun.management.jmxremote.access.file=/home/MY_USER/jmxremote.access \ -Dweblogic.management.GenerateDefaultConfig=true weblogic.Server &

認証プロパティを false に変更し、java.rmi.server.hostname を追加しました。ADMIN_HOST は、コンピューターの IP 172.17.209.66 に設定された変数です。

JConsole でサービス URL を使用した場合: service:jmx:rmi:///jndi/rmi://172.17.209.66:22222/jmxrmi

次の例外が発生します

22/11/2011 05:22:54 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://172.17.209.66:22222/jmxrmi] connecting...
22/11/2011 05:22:54 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://172.17.209.66:22222/jmxrmi] finding stub...
22/11/2011 05:22:54 RMIConnector connect
MÁS FINA: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi:///jndi/rmi://172.17.209.66:22222/jmxrmi] Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 172.17.209.66; nested exception is: 
    java.net.ConnectException: Conexión rehusada]
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 172.17.209.65; nested exception is: 
    java.net.ConnectException: Conexión rehusada]
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:340)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:207)

私のアプリケーションのログには、次のように表示されます。

Conector JMX Ready in: service:jmx:rmi:///jndi/rmi://usuario-System-Product-Name:22222/jmxrmi

/etc/hosts は次を示します。

172.17.209.65 usuario-System-Product-Name # NetworkManager が追加 127.0.0.1 localhost.localdomain localhost ::1 usuario-System-Product-Name localhost6.localdomain6 localhost6 127.0.1.1 usuario-System-Product-Name

それが、ip ではなく usuario-System-Product-Name が表示される理由ですか? コンピューターの IP をホスト名として設定しても?

私は両方のファイアウォールを無効にし、アレックスが提案したコマンドラインjmxツールを試してみましたが、うまくいきませんでした:-(

その他の提案/ヒント/ヘルプはありますか?

4

2 に答える 2

-1

一方の端でファイアウォールに問題があると思います。

したがって、まず (可能であれば) 両方のファイアウォールを閉じて、何が起こるかを確認してください。動作し始めた場合は、どのポートを開く必要があるかを確認してください。問題は、JMX が 2 つのポートを使用することです。1 つは構成可能で、もう 1 つは動的に選択されます。したがって、ファイアウォールをどのように開くことができるかは、ファイアウォールによって異なります。

その他の可能性は、コマンド ライン jmx ツールを使用することです。サーバーが SSH/telnet ターミナル ウィンドウを介して実行されている同じマシンでローカルに実行します。そのようなアプリケーションの 1 つを使用しました: http://crawler.archive.org/cmdline-jmxclient/downloads.html で、非常にうまく動作することがわかりました。

于 2011-11-17T19:17:25.783 に答える
-1

同じ問題に遭遇し、ポート スキャナーを使用してサーバーをスキャンしました。そして、サーバーのほとんどのポートがデフォルトで外部に対して閉じられていることに気付きました。少なくとも私の組織ではそうです。実際、スキャナーは 22 だけが開かれていると言っており、それがサーバーに SSH で接続できる理由だと思います。「閉じたファイアウォール」が何を意味するのかをネットワーク チームに確認し、作業中のマシンのポート (この場合は 22222) がオンになっていることを確認することをお勧めします。

于 2013-11-08T21:27:19.657 に答える