3

Red Hat サーバーに Tomcat/Jetty を使用して Java SOAP サーブレットをデプロイしています。1 秒あたり 5 つのリクエストを送信する別のサーバーでクライアントを起動します。読み取りタイムアウトは 10 秒で、リクエストの処理には平均 20 ミリ秒かかります。

しかし、1 時間経過しても Web サーバーが要求に応答しないことがあります。クライアントは SocketTimeoutException をログに記録します: 読み取りがタイムアウトしました。

  • 負荷平均、iowait、およびメモリ使用量は、両方のサーバーで低くなっています。
  • ガベージ コレクターを微調整したところ、一時停止時間が非常に短くなりました。
  • バッファサイズを変更しましたが、役に立ちませんでした。
  • SOAP メッセージは 300 ~ 500 文字しかありません。
  • 別のサーバーで試しましたが、それでも発生しました。
  • Tomcat/Jetty スレッド プールが飽和していません。
  • Jetty 7、8、および Tomcat 7 で試しました。
  • コンテナーによってログに記録されたエラーは表示されません。
  • 64 ビットで Java 7 update 7 を使用しています。
  • プロパティを使用しています -Djava.net.preferIPv4Stack=true

Wireshark で tcpdump を調べたところ、TCP 接続の最初の要求である場合にのみ問題が発生します。サーバーはすべてのパケットに ACK を返します。キープアライブ接続の数を減らすと、問題がより頻繁に発生します。

Tomcat / Jetty は接続を受け入れているようですが、何も読み取っていません。読み取りタイムアウトを 100 秒に設定してみましたが、まだ問題が発生します。

何がこれを引き起こす可能性があるか考えていますか?

4

0 に答える 0