1. 문제 발생 원인
해당 오류 메시지는 HikariCP라는 JDBC 커넥션 풀 라이브러리에서 발생하는 경고 메시지입니다. HikariCP의 Housekeeper 스레드가 일정 시간마다 커넥션 풀의 상태를 체크하는데, 이 때 예상한 시간보다 훨씬 많은 시간이 경과했음을 나타내는 메시지입니다.
일반적으로 이런 현상은 다음 3가지 원인으로 인해 발생할 수 있습니다.
a. Thread Starvation (스레드 기아): 다른 스레드들이 CPU 자원을 과도하게 점유하면서 Housekeeper 스레드가 충분한 CPU 시간을 얻지 못하는 경우입니다. 이런 상황은 시스템의 전체적인 성능 저하를 초래할 수 있습니다.
b. Clock Leap (시계 도약): 시스템의 시간이 갑자기 크게 변경되는 경우입니다. 이는 NTP(Network Time Protocol) 같은 시간 동기화 서비스에 의해 발생할 수 있습니다.
c. 개발중인 PC의 의도된 sleep 또는 절전모드: 위 사유로 인해 발생한 것은 맞으나, 결론적으로 프로그램이 가동되는 PC가 sleep 혹은 절전 모드로 전환되며 설정값이 변경되며 발생할 수 있습니다.
2. 해결 방법
a. Thread Starvation에 대한 해결책: 시스템의 CPU 사용률을 모니터링하고 과도한 CPU 사용을 줄이는 방법을 고려해보세요. 또한 JVM의 가비지 컬렉션 동작을 최적화하거나, 필요하다면 하드웨어를 업그레이드하는 것도 고려해 볼 수 있습니다.
b. Clock Leap에 대한 해결책: 만약 서버의 시간이 자주 변경된다면, NTP 설정을 점검해보세요. 시간 동기화가 너무 자주 발생하지 않도록 NTP 설정을 조정하거나, 필요하다면 NTP 사용을 중지하는 것도 한 방법입니다.
c. 개발중인 PC의 의도된 sleep 또는 절전모드에 대한 해결책 : 필자의 경우에는 본 사례에 해당했습니다. mac PC로 프로그램을 개발하고 있었으며, 프로그램이 가동되는 동안 해당 PC가 절전모드로 들어갈 경우 해당 로그가 발생했습니다. 이는 mac이 절전 모드로 전환됨에 따라 설정값이 변경되어 발생하였기에 실서비스 환경에서는 악영향을 주는 상태가 아니라고 보면 되겠습니다. (실서비스 배포 환경에서는 sleep이나 절전모드로 전환되지 않는 PC에서 프로그램이 가동될 것이기 때문에)
프로그램이 가동되는 PC가 절전모드 또는 sleep 상태로 전환되지 않도록 하면 해당 로그가 발생하지 않습니다.
이 오류 메시지는 경고 수준이므로, 애플리케이션의 정상 동작에는 영향을 미치지 않습니다. 그러나 이 메시지가 자주 발생한다면, 시스템의 성능 문제나 설정 문제가 있을 수 있으므로 적절한 조치를 취하는 것이 좋습니다.