56

jConsole を使用してリモート Tomcat JMX インスタンスに接続しようとしています。しかし、うまく接続できません。何か案が?

リモート tomcat に次のオプションを含めましたcatalina.sh

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote \
    -Dcom.sun.management.jmxremote.port=9004 \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false"
4

12 に答える 12

63

同じではないにしても、同様の問題がありました。マシン上でローカルにjconsoleを起動すると、JMXサーバーに接続できます。

RMIサーバーが正しいIPをリッスンしていなかったようです。したがって、この関連する質問で示唆されたように、私は以下を追加しました:

-Djava.rmi.server.hostname=<host ip>

JAVA_OPTS同様に、そしてそれは働いた。

于 2009-08-19T14:49:04.233 に答える
36

他のメンバーのヒントを参考に、ネット上に散らばる情報を集めてみました。

JMX によって引き起こされるほとんどの問題は、(imo) JMX が動的に割り当てられた 2 番目のネットワーク ポートを開くという事実です。ファイアウォール (iptables など) がこれをブロックします。

Linux上のTomcatのソリューション:

tomcat 6.0.24 以降を使用します Apache tomcat extras から catalina-jmx-remote.jar をダウンロードします (Tomcat ダウンロード ページの参照を使用) $CTALINA_HOME\lib にコピーします

これにより、JMX が使用する両方のポートを設定できます。

server.xml の Server セクションを編集します

<Server port="8005" ..>
  ...
  <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9840" rmiServerPortPlatform="9841"/>

いくつかの環境変数を設定します (setenv.sh など)。

CATALINA_OPTS="
  -Djava.rmi.server.hostname=IP-TO-LISTEN
  -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password 
  -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access 
  -Dcom.sun.management.jmxremote.ssl=false"

これにより、JMX のアクセス制御が有効になります

jmxremote.access は次のようになります

monitorRole readonly
controlRole readwrite

end jmxremote.password は

monitorRole tomcat
controlRole tomcat

(単純なスペースのみ)

トムキャットを再起動します。

サーバーでファイアウォールを構成します(例:iptables)

/etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9840 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9841 -j ACCEPT

および /etc/sysconfig/ip6tables

-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 9840 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 9841 -j ACCEPT

iptablesを再起動します

終わり!

ここで、ワークステーションで VisualVM または JConsole を使用して、rmiRegistryPortPlatform (サンプルでは 9840) への接続を確立します。

ワークステーションとサーバーの間にファイアウォールがなければ、動作するはずです。

于 2011-07-21T20:26:23.340 に答える
8

JMX 接続 URL として使用している文字列。明白なことを指摘するつもりはありませんが、JConsole のインターフェイスはひどく、リモート jmx アプリに接続する前に非常に複雑な URL が必要です。私は次のようになります。

service:jmx:rmi:///jndi/rmi://(hostname):(jmxport)/jmxrmi
于 2010-05-19T20:49:21.447 に答える
2

Linux で作業している場合は、catalina.sh ファイルを次のように変更します。

                CATALINA_OPTS="-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=<HOST_IP> -Dcom.sun.management.jmxremote.port=<HOST_PORT> -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
            export CATALINA_OPTS

または /etc/profile ファイルをルートとして変更し、ファイルを再実行します (ソース /etc/profile)

Windows で作業していて、コマンド ラインから tomcat を起動している場合は、環境変数 CATALINA_OPTS を使用します。

Windows で作業していて、Tomcat をサービスとして開始する場合は、モニター サービス ユーティリティを使用して、サービスの初期化パラメーターを構成する必要があります (setenv.bat、catalina.bat、env-vars のいずれも機能しません)。そのためには、services.msc にリストされているサービス名 (jasperreportsTomcat など) が必要です。その後、管理者としてコンソールを開いて実行する必要があります (たとえば): tomcat6w.exe //MS//jasperreportsTomcat

このコマンドを使用すると、パネルを開くことができるトレイ アイコンが表示されます。「Java」タブで、jmx オプションを変更できるようになりました。末尾に空白を追加しないように注意し、「[enter]」記号を使用して各オプション行を区切ります。

-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.61.101
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

それが役に立てば幸い

于 2013-10-11T14:52:18.683 に答える
2

「しかし、うまく接続できません。」と言うとき、正確にはどういう意味ですか? エラーメッセージはありますか? jconsole でロギングをオンにして、デバッグに役立つかどうかを確認してください。

jconsole のロギングを有効にするには、jconsole を実行するディレクトリにある logging.properties という名前のファイルを編集し、次を追加します。

handlers= java.util.logging.ConsoleHandler

.level=INFO

java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

java.util.logging.ConsoleHandler.level = FINEST
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

javax.management.level=FINEST
javax.management.remote.level=FINEST

次に、jconsole を次のように起動します。

jconsole -J-Djava.util.logging.config.file=logging.properties
于 2009-08-12T23:24:31.400 に答える
1

サーバーがファイアウォールの背後にあるかどうかを確認します。JMX は、起動時に 2 つのポートを開く RMI に基づいています。1 つは登録ポートで、デフォルトは 1099 で、com.sun.management.jmxremote.port オプションで指定できます。もう 1 つはデータ通信用で、ランダムであることが問題の原因です。幸いなことに、JDK6 以降では、このランダムなポートを com.sun.management.jmxremote.rmi.port オプションで指定できるようになりました。

{tomcat_dir}/bin/setenv.sh に次の行を追加します。

export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8991 -Dcom.sun.management.jmxremote.rmi.port=8991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
于 2015-06-04T06:40:35.527 に答える
0

PROTIP: RMI レジストリと JMX/RMI サーバーのポートを (既知の番号を持つように) 修正する必要があります。これを行うには、jar-file を lib-dir に置き、特別なリスナーを構成します。(そしてもちろん、JMX をアクティブ化するための通常のフラグ

    -Dcom.sun.management.jmxremote  \
    -Dcom.sun.management.jmxremote.port=8999 \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Djava.rmi.server.hostname=<HOSTNAME> \

参照: http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.htmlの JMX リモート ライフサイクル リスナー

于 2013-10-11T09:44:29.950 に答える
0

/etc/hosts自分のアカウントに関連付けられている localhost アドレスをマシンの IP に置き換えた Linux を変更すると、この問題は解決しました。

于 2011-03-11T18:13:07.003 に答える
0

さて、Linuxボックス(仮想マシン)でこの問題が発生し、 -Djava.rmi.server.hostname プロパティを使用して修正しましたが、理解できないことがあります。私のマシンには5つのTomcatサーバーがあり、すべてのサーバーで連続したポート(8008、8018、8028 ...)でjmxが有効になっており、JMXの接続でこの問題が発生したのはそのうちの1つだけでした。ファイアウォールなし、Tomcat の -Djava.rmi.server.hostname プロパティなし....

つまり、問題は理解できますが、なぜ4つのトムキャットが機能し、1つが機能しないのか理解できません。

PD: 私の英語はとても下手です。謝罪いたします。

于 2011-11-17T09:12:05.487 に答える