Thread starvation or clock leap detected - 메모리 부족

김태훈·2023년 7월 27일
0
post-custom-banner

개요

만든 프로젝트에 HTTPS를 적용하려고 ec2 서버에 배포를 시도하자 서버가 먹통이 되면서 아래와 같은 에러를 뱉어냈다.

com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=1m54s644ms55µs881ns).

해결과정

검색을 해보니 Thread들이 기아 현상에 빠지는 상황은 보통 많은 스레드들이 동작하면서 자원을 경쟁하는 상황이라는 정보를 얻었다.
그렇지만 나는 단순히 서버를 띄우는 과정인데, 그렇게 많은 스레드가 동작할까 하는 의문을 가졌다. 그 과정에서 혹시 자원 자체가 부족해서 스레드들이 대기하고 있는 게 아닐까 하는 의문을 가졌다.

aws의 모니터링 탭에 들어가 확인을 해 본 결과 CPU의 사용량이 100%에 육박한 걸 확인할 수 있었다.
Thread들이 기아 현상에 빠지는 순간 CPU 사용량이 급증하는 걸 확인할 수 있었다.

메모리 상태를 확인하기 위해 서버에 들어가 확인해본 결과 kswapd0 이라는 프로세스가 많은 자원을 가져가고 있었다.
kswapd0는 메모리가 부족해서 SWAP 메모리를 사용할때 생성되는 프로세스이다.

다시 로컬 컴퓨터로 돌아와 jar 파일을 실행하니 아래와 같은 실행시간을 확인할 수 있었다.

서버에서 메모리 사용량을 확인하자 MySQL이 40퍼센트 정도를 점유하고 있었다. MySQL이 대략 500, java가 대략 500 정도씩 가져가면 메모리가 부족하겠구나 하는 결론을 낼 수 있었다.

메모리를 줄이기 위해 서버에서 swap 메모리를 사용하는 방식도 있지만, 분리가 가능한 만큼 MySQL을 별도의 서버로 분리하기로 결정했다.

WAS와 DB를 분리하니까 문제없이 잘 동작하는 걸 확인할 수 있었다.

결론

프리티어 서버는 크기가 작다. 웬만하면 서버를 다 분리해서 사용하자. 만약에 그래도 부족하면 Swap 메모리 설정을 해줍시다.

profile
작은 지식 모아모아
post-custom-banner

0개의 댓글