2017-03-26 4 views
-1

この問題は、以下のようなapache HttpClients Connection Managerを使用してhttpリクエストを送信した後にresultを受信することによって発生しました。戻り値は非常にわずかな回数しか発生しません。Apache HttpClient接続マネージャをシャットダウンしないとどうなりますか?

private static final CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).setDefaultRequestConfig(configForRequest).build(); 
httpClient.execute... 

このような状況では、ソケットに何が起こるのですか?要求を受け取った後に毎回Connect Managerをシャットダウンする必要がありますか?または、それをチェックしてシャットダウンする適切な時間はありますか?

答えて

0

通常、通信コンポーネントごと、またはアプリケーションごとにHttpClientを1つインスタンス化することをお勧めします。ただし、アプリケーションでHttpClientを非常に頻繁にしか使用せず、メモリ内にHttpClientのアイドル状態のインスタンスを保持する必要がない場合は、HttpClientインスタンスを破棄する前に、マルチスレッド接続マネージャを明示的にシャットダウンすることを強く推奨します。これにより、接続プール内のすべてのHTTP接続が適切に閉じられます。

アプリケーションがこの標準に準拠している場合は、アプリケーションをブートストラップしている間にHttpClientとConnectionManagerを初期化するだけで、アプリケーションを停止しながらシャットダウンする必要があります。

メソッドを呼び出すたびにそのようなリソースを作成するだけで、アプリケーションの効率が低下するだけでなく、メモリリークの原因となるエラーも減少します。

関連する問題