web-dev-qa-db-ja.com

JRMP接続確立のエラー

私は次の例外トレースを取得しています:

Java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
    Java.net.SocketTimeoutException: Read timed out
    at Sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.Java:293)
    at Sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.Java:190)

私はこれについていくつかのフォーラムを読みましたが、この例外の根本的な原因を明確にしていません。これは、次のいずれかの理由によるものですか?

  1. メモリが不足しています。
  2. サーバーへの要求数が増加したためにRMI呼び出しが失敗し、そのうちの1つが待機し、この要求の処理がタイムアウトしました。
  3. 互換性のないjreバージョンまたはJREバージョンに関連するもの。
  4. ネットワーク関連の問題。
  5. ファイアウォール関連。
12
Sidd
  1. メモリが不足しています。

クライアントではありません。おそらくサーバーで、たとえば、スレッドの割り当てに失敗した場合。

  1. サーバーへの要求数が増加したためにRMI呼び出しが失敗し、そのうちの1つが待機し、この要求の処理がタイムアウトしました。

いいえ。エラーは、サーバー側のメソッド実装が呼び出されるずっと前の接続確立フェーズ中に発生します。

  1. 互換性のないjreバージョンまたはJREバージョンに関連するもの。

番号。

  1. ネットワーク関連の問題。

はい。

  1. ファイアウォール関連。

いいえ。これにより、接続タイムアウトが発生するか、特定の古いケースでは、読み取りタイムアウトではなく接続拒否が発生します。

3
user207421

このエラーが発生するのは、SSHサーバーを保持しているLANの外部からのSSHクライアントがサーバーに接続しようとしているときに、RMIが関与して、サーバーでRMIメソッドを実行できるようにする場合です。その理由は、サーバーに到達できない(ルートがない)ためです。述べられたすべてのケースはその理由に関連しているようです。

0
Jochen Seliger

クライアント側でも同じエラーが発生します。サーバーに到達可能で、Telnetを介してポートを開くことができます。クライアント側とサーバー側でWiresharkを使用して監視すると、次のようになります。

  • TCP接続が確立されている

    • SYN
    • SYN, ACK
    • ACK
  • クライアントが送信:JRMI, Version 2, Stream Protocol

  • サーバーの応答:JRMI, ProtocolAck-しかし、このパッケージはクライアント側に到達していません

私の場合、それはMagicDrawクライアントからライセンスサーバーへの接続です。他の場所にある他の大学については、プロキシを使用すると役立ちます:http.proxyHost=xxxx -Dhttp.proxyPort=8080とクライアントはHTTP経由で通信します。おそらくこれはあなたがこの問題を省くのに役立つかもしれません。 https://docs.Oracle.com/javase/7/docs/platform/rmi/spec/rmi-Arch6.html

Magic Drawのソースコードにアクセスできないので、具体的には言えません。

0
timguy