OkHttp라이브러리 connection leak(커넥션 누수)

yoondgu·2022년 10월 4일
0

오류 기록

목록 보기
10/10

자바 어플리케이션에서 open API로부터 데이터를 받아오기 위해, 해당 api 문서에 따라 Http 통신을 편리하게 할 수 있도록 지원하는 OkHttp 라이브러리를 사용하고 있다.

그런데 사용 중에 콘솔 창에 아래와 같은 경고 메시지가 출력되어서 확인해보았다.

 A connection to https://apis.openapi.sk.com/ was leaked.
 Did you forget to close a response body? To see where this was allocated,
 set the OkHttpClient logger level to FINE: Logger.getLogger(OkHttpClient.class.getName()).setLevel(Level.FINE)

써 있는 내용 그대로, response body를 close 하지 않은 상황이다.
반납해야 할 connection을 반납하지 않아서, 사용할 수 있는 connection 자원이 줄어들고 있어 leaked(누수)되었다는 것이다.

response.close() 코드를 추가하여 해결되었다.

OkHttp 라이브러리를 통해 통신을 할 때,
OkHttpClient 객체를 생성해서 요청을 보냈다. 이 과정에서 ConnectionPool을 이용하도록 구현되어있기 때문에, connection 자원을 반납하지 않고 계속해서 요청한다면 사용 가능한 자원은 모두 소모될 수 있다.
(연결은 5분동안 유지된다고 하는데, 만약 빠른 시간 동안 여러 번 요청을 보낸다면? 자원은 바닥날 것이다.)

현재 매 요청마다 새로운 OkHttpClient 객체를 생성하도록 되어 있기 때문에
당장은 사용할 때마다 바로 반납해주는 것으로 해결했지만
그보다는 OkHttpClient를 재사용하는 방법으로 수정하는 것이 더 좋을 것 같다.

참고링크
https://hbase.tistory.com/86

0개의 댓글