1

PoolingClientConnectionManager를 사용하고 있으며 연결이 누출되고있는 것으로 의심됩니다. 나는 아래와 같은 PoolStats을 인쇄하는 모니터링 스레드가 : PoolingClientConnectionManager PoolStats 및 잠재적 연결 누출 문제

[leased: 126; pending: 0; available: 14; max: 140] 
.. 
[leased: 140; pending: 20; available: 0; max: 140] 
.. 
[leased: 140; pending: 10; available: 0; max: 140] 

내가 풀 연결 (140)의 수에 스레드의 동일한 수의 산란을, 그래서 나는> 최대 대기 + 임대하지 기대 않았다. 이 가정은 유효합니까? 아니면 관리자가 연결을 유지 한 경우입니까? 이 경우 연결이 "임대"또는 "사용 가능"으로 표시되는지 확실하지 않습니다.

내가 알아챈 점은 DNS 확인 중에 HttpClient 연결이 중단되면 연결 누출이 발생할 수 있다는 것입니다. 이 시나리오에서는 전용 연결이 풀에 다시 해제되지 않습니다. 적절한 자원을 할당 해제하여 연결이 풀로 다시 올바르게 릴리스되도록 제안하는 방법이 있습니까?

미리 감사드립니다.

답변

0

예, 연결 유출 가능성이 높습니다. DNS 조회가 문제를 일으킬 가능성은 거의 없습니다. HttpClient는 I/O, 프로토콜 또는 런타임 예외의 경우 자동으로 연결을 해제합니다.

리소스 할당 해제와 관련하여 규칙은 매우 간단해야합니다. 응답과 관련된 엔터티가있는 한 해당 콘텐츠가 완전히 소비되도록해야합니다. HttpClient를 4.2 HttpClient를 4.3도 예외적 인 경우 자원 할당 해제에 대한 추가 안전 가드 제공 : 당신은 설명 here로 설정 또한 연결 관리 컨텍스트 로깅 응용 프로그램을 실행하려고하고 있는지 볼 수 4.3

4.2에서 HttpUriRequest#releaseConnectionCloseableHttpResponse#close을 기본 연결을 해제하지 않는 요청을 추적하는 데 도움이 될 수 있습니다.

+0

감사합니다. 해당 "Connection released"디버그 로그가없는 "Connection leased"라는 PoolingClientConnectionManager가 있습니다. 이것은 연결 유출의 신호입니까? – teonadi

+0

@teonadi : 예, 그렇습니다. – oleg