1 분 소요

문제 상황

Spring Boot 서버를 실행해놓고 다음 날 확인해보니 아래와 같은 로그가 찍혀있었다.

2018-11-28 02:44:21.892  WARN 2135 --- [ool housekeeper] com.zaxxer.hikari.pool.HikariPool        : api-dev-conn-pool - Thread starvation or clock leap detected (housekeeper delta=2h28s701ms).
2018-11-28 02:45:46.788  WARN 2135 --- [ool housekeeper] com.zaxxer.hikari.pool.HikariPool        : api-dev-conn-pool - Thread starvation or clock leap detected (housekeeper delta=54s902ms).
2018-11-28 02:47:41.700  WARN 2135 --- [ool housekeeper] com.zaxxer.hikari.pool.HikariPool        : api-dev-conn-pool - Thread starvation or clock leap detected (housekeeper delta=54s904ms).
2018-11-28 02:49:06.617  WARN 2135 --- [ool housekeeper] com.zaxxer.hikari.pool.HikariPool        : api-dev-conn-pool - Thread starvation or clock leap detected (housekeeper delta=54s915ms).
2018-11-28 02:51:01.900  WARN 2135 --- [ool housekeeper] com.zaxxer.hikari.pool.HikariPool        : api-dev-conn-pool - Thread starvation or clock leap detected (housekeeper delta=55s269ms).
2018-11-28 02:52:26.821  WARN 2135 --- [ool housekeeper] com.zaxxer.hikari.pool.HikariPool        : api-dev-conn-pool - Thread starvation or clock leap detected (housekeeper delta=54s910ms).
2018-11-28 02:54:21.733  WARN 2135 --- [ool housekeeper] com.zaxxer.hikari.pool.HikariPool        : api-dev-conn-pool - Thread starvation or clock leap detected (housekeeper delta=54s905ms).
2018-11-28 04:55:20.700  WARN 2135 --- [ool housekeeper] com.zaxxer.hikari.pool.HikariPool        : api-dev-conn-pool - Thread starvation or clock leap detected (housekeeper delta=2h28s965ms).

구글링해보니 1. 랩탑 같은 경우 잠들기 모드에 들어가면 발생할 수 있다는 글도 있었고, 2. Connection이 부족해서 Thread Starvation 상황이 발생한 것이라는 글도 있었다.

정확한 이유는 모르지만 두 번째 상황이라고 가정하고 해결하였다.

HikarilCP에서 제공하는 최적의 Maximum Pool Size를 구하는 공식
pool size = Tn x (Cm - 1) + 1

스프링 프로젝트의 Thread수는 10개이다.
한 Thread가 작업을 하면서 필요로 하는 Connection의 수는 2개이다.
위 공식에 대입하면 우리 프로젝트의 최적 pool size는 10*(2-1)+1로 11개이다.
11개 이상의 Connection을 제공하면 오류가 해결될 것이다.

해결 방법

application.yml에 아래 코드를 추가하여 Connection의 수를 늘린다.

spring:
  datasource:
    hikari:
      maximum-pool-size: 20

+) 해당 코드를 추가해도 같은 로그가 찍히는 것을 보니 1번이 이유였던 것 같다.

Ref.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기