私は次の例外トレースを取得しています:
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)
私はこれについていくつかのフォーラムを読みましたが、この例外の根本的な原因を明確にしていません。これは、次のいずれかの理由によるものですか?
- メモリが不足しています。
クライアントではありません。おそらくサーバーで、たとえば、スレッドの割り当てに失敗した場合。
- サーバーへの要求数が増加したためにRMI呼び出しが失敗し、そのうちの1つが待機し、この要求の処理がタイムアウトしました。
いいえ。エラーは、サーバー側のメソッド実装が呼び出されるずっと前の接続確立フェーズ中に発生します。
- 互換性のないjreバージョンまたはJREバージョンに関連するもの。
番号。
- ネットワーク関連の問題。
はい。
- ファイアウォール関連。
いいえ。これにより、接続タイムアウトが発生するか、特定の古いケースでは、読み取りタイムアウトではなく接続拒否が発生します。
このエラーが発生するのは、SSHサーバーを保持しているLANの外部からのSSHクライアントがサーバーに接続しようとしているときに、RMIが関与して、サーバーでRMIメソッドを実行できるようにする場合です。その理由は、サーバーに到達できない(ルートがない)ためです。述べられたすべてのケースはその理由に関連しているようです。
クライアント側でも同じエラーが発生します。サーバーに到達可能で、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のソースコードにアクセスできないので、具体的には言えません。