Failed to valid connection WARN

크리링·2024년 4월 8일
0

실무 트러블 슈팅

목록 보기
1/5
post-thumbnail

문제 상황

명령 사이에 긴 간격이 있을 경우
테스트 서버의 로그에서 아래 이미지와 같은

Possibly consider using a shorter maxLifetime value.

WARN 레벨의 로그가 발생

HikariPool의 문제로 보이는데 커넥션 풀의 누수를 경고하는 것으로 예상하고 관련된 내용을 찾아보았다.

찾아본 결과 로그의 의미는 connection을 갱신하고자 하는데 이미 닫힌 커넥션이라 어떤 행위도 할 수 없다라는 내용으로 확인했고, HikariCP의 connectionMySQL과의 관계에 대해 알아보자.



HikariCP와 MySQL 간의 커넥션

HikariCP의 Connection

  • maxLifeTime은 Hikari pool에서 connection이 살아있을 수 있는 시간입니다.
  • 사용중인 connection은 종료하지 않고 이미 닫혀있는 경우에만 제거
  • connection을 한번에 대량으로 종료하고 생성하면 비용이 많이든다.
  • DB에 설정된 Connection time limit보다 짧아야 한다.
  • 0으로 설정하면 무한으로 connection이 살아있다.
  • 기본값은 30분이다.
  • maxLifetime은 최소 30초이상 설정 (미만이면 30분으로 변경)

MySQL의 wait_timeout

wait_timeout : 활동하지 않는 커넥션을 끊을때까지 서버가 대기하는 시간
-> 현재 sleep 상태인 Connection을 끊는 주기



문제 원인 파악

위의 내용을 토대로 로그의 원인은 MySQL의 wait_timeout은 경과되어 connection에서 어떤 동작도 할 수 없다는 것을 알려준다.

지금 테스트 서버 RDSwait_timeout은 1분 3초였다.

HikariCP의 Connection은 따로 application.yml에 없는 것으로 보아 기본 값인 30분이었다.

그래서 application.yml에서 maxLifetime을 1분으로 설정했다
(max-lifetime은 네트워크 통신 등을 감안해서 Database의 wait_timeout으로 부터 2~3초 정도 짧게 주는걸 권장한다.)

이제 이전 요청 하고 30분 뒤에 요청한 후 로그를 확인하면
이전에 있었던 Failed to validate connection WARN 로그가 사라졌다.






참고

0개의 댓글