danuri
오늘의 기록
danuri
전체 방문자
오늘
어제
  • 오늘의 기록 (307)
    • java (150)
      • java (33)
      • spring (63)
      • jpa (36)
      • querydsl (7)
      • intelliJ (9)
    • kotlin (8)
    • python (24)
      • python (10)
      • data analysis (13)
      • crawling (1)
    • ddd (2)
    • chatgpt (2)
    • algorithm (33)
      • theory (9)
      • problems (23)
    • http (8)
    • git (8)
    • database (5)
    • aws (12)
    • devops (10)
      • docker (6)
      • cicd (4)
    • book (44)
      • clean code (9)
      • 도메인 주도 개발 시작하기 (10)
      • 자바 최적화 (11)
      • 마이크로서비스 패턴 (0)
      • 스프링으로 시작하는 리액티브 프로그래밍 (14)
    • tistory (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • Database
  • 자바 최적화
  • Jackson
  • CICD
  • 도메인 주도 설계
  • SWAGGER
  • Saving Plans
  • ChatGPT
  • Spring
  • DDD
  • mockito
  • Java
  • RDS
  • Kotlin
  • docker
  • 마이크로서비스패턴
  • S3
  • Thymeleaf
  • POSTGIS
  • nuribank
  • Security
  • reactive
  • 트랜잭션
  • PostgreSQL
  • gitlab
  • JPA
  • Bitmask
  • connection
  • AWS
  • 등가속도 운동

최근 댓글

최근 글

hELLO · Designed By 정상우.
danuri

오늘의 기록

java/spring

[Spring] Failed to validate connection

2022. 8. 3. 16:20

서비스 운영 중 아래와 같은 경고 로그가 지속적으로 생겼다.

hikariPool - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@7aa2f8a6 ((conn=463456) Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.

 

서비스가 동작하는데 특별한 문제는 없었지만, 자꾸 경고 로그가 발생하는 것이 거슬려서 해결해보기로 한다.

경고 로그 마지막에 using a shorter maxLifetime value 라는 것이 보여서 해당 키워드로 열심히 검색해봤다.

 

알아본 결과는 다음과 같다.

현재 DB로 사용하고 있는 RDS의 wait_timeout은 3분이다.

그러나 스프링 서버의 기본 커넥션 풀인 hikari CP는 max-lifetime이 30분인데, 여기서 문제가 발생한다.

 

RDS는 idle 상태의 커넥션을 wait_timeout이 지나면 연결을 종료한다.

스프링 서버는 idle 상태의 커넥션을 max-lifetime이 지나면 연결을 끊고 새로운 커넥션을 생성한다.

따라서, max-lifetime이 wait_timeout보다 짧아야 RDS가 커넥션을 끊기 전에 스프링 서버 스스로 연결을 끊고 새로운 커넥션을 맺기 때문에 문제가 발생하지 않는다.

 

실제로 hikari CP는 네트워크 지연을 고려하여 max-lifetime을 wait_timeout보다 2~3초 정도 짧게 줄 것을 권고한다.

스프링에서 다음과 설정을 추가하면 경고 로그는 없어진다.

spring:
  datasource:
    hikari:
      max-lifetime: 177000 # 177초, hikari는 RDS wait_timeout(180초) 보다 2 ~ 3초 정도 짧게 줄 것을 권장

 


 

참고자료

https://velog.io/@jijang/Failed-to-validate-connection-처리

https://cmelcmel.tistory.com/111

 

저작자표시 비영리 동일조건 (새창열림)

'java > spring' 카테고리의 다른 글

[Spring] request multipart file size 조정  (0) 2022.08.03
[Spring] MariaDB connection 끊김  (0) 2022.08.03
[Spring] AWS S3 객체 전체 조회 or 해당 level만 조회  (0) 2022.08.01
[Spring] AWS S3 접근  (0) 2022.07.25
[Spring] S3 Pre-Signed URL 생성  (0) 2022.07.25
    'java/spring' 카테고리의 다른 글
    • [Spring] request multipart file size 조정
    • [Spring] MariaDB connection 끊김
    • [Spring] AWS S3 객체 전체 조회 or 해당 level만 조회
    • [Spring] AWS S3 접근
    danuri
    danuri
    IT 관련 정보(컴퓨터 지식, 개발)를 꾸준히 기록하는 블로그입니다.

    티스토리툴바