0

パッケージorg.apache.http.impl.connからのHttpConnPool.classの有効期間(TTL)変数は何ですか?行う?ダミーサーバー上のLoadTestは、HttpConnPoolでTTLまたはTTLを設定した後に成功しますが、それは何ですか?

ダミーサーバーで負荷テストを実行していました。私が1秒間に9回のリクエストに近づいているとき。ランダムNoHttpResponseExceptionが発生しました。ターゲットが応答に失敗しました。またはダミーサーバーが応答に失敗しました。

次に、「TTL」または「TimetoLive」というプロパティを追加して値を与えました。 HttpResponseExceptionが発生しなくなりました。私はこの変数がNoHttpResponseExceptionを最初に発生させないようにするために何をしているのか知りたいです。

答えて

0

実際、私は自分自身で答えを見つけました。

私の負荷テストでは、最初に "NoHttpResponseException、ターゲットサーバー@Somelink:PortNumberが応答に失敗しました。" HTTPClientは永続的な接続を維持するため、複数の要求を送信するために1つの同じ接続を意味します。これはより効率的です。数ミリ秒または数秒間設定されたエビクタースレッドがあります。エビクター・スレッドは、一定のミリ秒後にアイドル接続を除去します。生産中には、常にトラフィックがないため、アイドル状態になる可能性があります。ロードテスト中は、クライアントサーバーに常に要求を送信し続けるので、接続はアイドル状態になりません。したがって、接続は追い出されず、TTLプロパティはデフォルト値の "-1"に設定されます。これは無限であることを意味します(これは私のアプリケーションのためのもので、アプリケーションごとに開発者が設定した値に依存します)。

TTLは、アイドルであるかどうかにかかわらず、接続がアクティブでなければならない期間を定義するプロパティです。プロパティーが "-1"に設定されている場合、接続は永久に、または少なくともクライアント・サーバーがそれを閉じるまでアクティブのままです。クライアントサーバーは、通常、一定の時間が経過すると接続を終了します。サーバーは永遠に接続を維持しません。新しい接続が常に確立されます。

クライアントが接続を閉じるとき、私たちのサーバは接続が確立されているとみなしますが、クライアントは応答を送信しませんでした。したがって、NoHttpResponseExceptionを返します。つまり、ターゲットサーバーが応答に失敗しました。 TTLプロパティを追加すると、アイドル状態であるかどうかに関係なく、永続的な接続が確実に削除されます。したがって、私たちはいつもNoHttpResponseExceptionを防ぐ新しい接続を持っています。

こちらがお役に立てば幸いです。

関連する問題