13

次の例外トレースが表示されます:

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. ファイアウォール関連。
4

3 に答える 3

3
  1. メモリが不足しています。

クライアントではありません。たとえば、スレッドの割り当てに失敗した場合は、サーバーで発生する可能性があります。

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

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

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

いいえ。

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

はい。

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

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

于 2013-01-15T07:19:27.093 に答える
1

クライアント側でも同じエラーが発生します。サーバーに到達可能で、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 のソース コードにアクセスできないため、具体的には言えません。

于 2016-04-21T09:15:29.433 に答える