Spring と Tomcat 6 を使用して Web アプリケーションを開発しています。何らかの理由で、リクエストの完了に時間がかかりすぎて、サーバーのパフォーマンスが低下することがあります。Tomcat 6 または Spring でリクエストの実行時間を制限することはできますか? この問題に対する他のアプローチは大歓迎です。ありがとう。
3 に答える
HttpConnector構成の使用connectionTimeout
server.xmlを変更します
<Connector ... connectionTimeout="xxxx"
ここで、xxxxはミリ秒の量です
Tomcat 6またはSpringでリクエストの実行時間を制限することは可能ですか?
はい、可能ですが、これは自分で実装する必要があります。
基本的な考え方は、リクエストメソッドはを使用しTimer
て、将来N秒間の割り込みをスケジュールする必要があるということです。次に、要求の処理中に定期的にチェックして、中断されているかどうかを確認する必要があります。最後に、タイムアウト前にタイマーが終了した場合は、タイマーをキャンセルする必要があります。
上記は、サーブレットがリクエストの処理に費やす時間を制限する必要があることを前提としています。代わりに、クライアント側でタイムアウトを実装したい場合は、リクエストの完了時にタイムアウトを設定するのは簡単です。たとえば、Tomcatリクエストのタイムアウトを参照してください。
(ただし、クライアント側のタイムアウトの問題は、サーバーがクライアントが待機をあきらめたことを認識せず、要求を処理し続けることです。これで大きな問題が発生しやすくなります。タイムアウトよりも完了するのにはるかに長い時間、タイムアウトした要求を繰り返し再試行するクライアントと組み合わせる...)
上記の Sthepen の発言は正しくありません。クライアント側では、あきらめるかブラウザを閉じると、もちろんブラウザはソケットを有効に保ちません。ソケットのシャットダウンを行います (メモリとポートを回復しますよね?)。シャットダウン手順は、敷設されたシグナルをサーバー側ソケットに送信します-RSTだと思います。