5

これが以前に尋ねられた質問の繰り返しである場合は申し訳ありませんが、ここや他の場所で提供されている解決策を試しましたが、どれもうまくいかないようです.

シナリオ: ファイアウォールの背後にある運用 Tomcat 7 サーバーのプロファイルを作成する必要があります。このサーバーへの SSH アクセスしかありません。最適なプロファイリング ツールは Visualvm であり、これらのサーバーには GUI がインストールされていません。サーバーと接続しようとしているマシンの両方で、Ubuntu 10.04 サーバー LTS を実行しています。

考えられる解決策: SSH トンネル経由で visualvm を使用することは可能であるように思われ、以下のリンクはこれを行うためのかなり詳細なガイドを提供します:

Tomcat+VisualVM+SSH ガイド

また、次の 2 行を使用して、Tomcat の /conf ディレクトリに jmxremote.access ファイルを追加しました。

monitorRole readonly
controlRole readwrite

問題: 記事に記載されている手順に従いましたが、問題ないようです。jmxterm とガイドに記載されている接続文字列を使用して、サーバーの jmx ポートに (サーバーから) ローカルに接続できます。

ガイドに従ってテストとしてローカル tomcat を構成しましたが、Visualvm は接続文字列を使用してこの tomcat インスタンスに問題なく接続できました。

ただし、VisualVM は SSH トンネル経由でリモート サーバーに接続しません。JConsole の方がシンプルでログ機能が優れているため、試してみましたが、次の一連のメッセージが表示されます。

FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi]  connecting...
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] finding stub...
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] connecting stub...
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] getting connection...
FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:12009/jndi/rmi://localhost:12008/jmxrmi] failed to connect: java.rmi.NoSuchObjectException: no such object in table

ここで私が間違ったことについてのアイデアはありますか? どんな助けでも大歓迎です!

ありがとうございました。

4

2 に答える 2

2

参照されている記事では実際には取り上げられていない、あなたが抱えている問題は、jmx-rmi、より具体的にはRMI自体が機能する方法だと思います。次のようなTomcatサーバーのセットアップ:

  1. localhost:12009に接続するように構成されたRMIリモータブルを作成しました。
  2. localhost:12008のリスニングポートを使用してlocalhostにRMIレジストリを作成しました。

ローカルで実行する場合は、RMIレジストリでスタブを検索し、スタブに対して呼び出してjmx呼び出しを発行すると、問題なくlocalhost:12009に接続します。

SSHを介してリモートで実行する場合、ポート12008でリモートからTomcatサーバーにトンネリングしたと想定します。したがって、リクエストを発行すると、ログ出力にスタブが正常であることが示されているように見えるため、リモート localhost:12008がトンネリングされます。tomcatServer:12008

次に、リモートはスタブに対して実行され、スタブは接続を試みてlocalhost:12009失敗します。

私の推測では、リモートのlocalhost:12008localhost:12009をトンネリングして、tomcatServer:12008tomcatServer:12009にリダイレクトする必要があります。

これを回避する別の方法は、RMI jmxプロトコルを破棄し、 Jolokia(HTTP)、JMX-WS(HTTP WebService)、またはJMXMP(Socket)などを使用することです。これにより、SSHの調整作業がはるかに簡単になります。JMXMPを試してみたい場合は、ビルドを変更したOpenDMKというgithubプロジェクトを作成しました。jmx-optionalパッケージが必要になります。

于 2012-09-07T13:48:42.253 に答える
0

ご質問ありがとうございます。-- 私は同じ基本的なニーズを持っていました。申し訳ありませんが、実際にはここに新しいものを追加しているわけではありませんが、あなたが提供した参照について言及したいと思います: https://www.liferay.com/web/thiago.moreira/blog/-/blogs/how-to-monitor- liferay-tomcat-remotely-through-firewalls-using-visualvm はすぐに機能しました (最近のバージョン (Tomcat 7 および VisualVM 1.3.8) にのみ関連する非常に小さな調整のみ)。私の場合、Tomcat は CentOS 6.6 で実行されており、監視マシンは Mac です (おそらく、これは他の誰かの助けになるかもしれません)。再度、感謝します。

于 2015-01-24T06:23:50.767 に答える