Hikari pool맥스 사이즈 문제
API 구현시 적은 트래픽에서는 문제가 없지만 트래픽이 늘어나면 hikari pool connection timeout 발생으로 요청을 처리하지 못하는 문제를 겪은 적이 있다.
모니터링을 하다보면 hikariPool 에서 connection을 얻을 수 없다고 한다.
이런 경우 나를 포함해서 통상 이렇게 해결을 했을 것이다.
- pool 사이즈를 늘려서 해결
사이즈를 늘려서 해결 할 수 있지만 이게 과연 정답인지에 대하여 생각을 해볼 필요가 있다.
Deadlock 발생으로 인하여 생기는 문제
트래픽이 몰리는 상황에서는 Threand간 커넥션을 차지 하기위해서 레이스 커넥션이 발생
한 트랜잭션에 2개의 커넥션이? 필요
우리가 생각할때 하나의 트랜잭션당 하나의 풀만 있으면 될것 같지만 그렇지 않기떄문에 풀사이즈를 일단 늘리면 해결이 되지만 정확한 숫자는 하단의 공식을 참조하는게 좋다.
우리가 생각할때 하나의 트랜잭션당 하나의 풀만 있으면 될것 같지만 그렇지 않기떄문에 풀사이즈를 일단 늘리면 해결이 되지만 정확한 숫자는 하단의 공식을 참조하는게 좋다
같이 일을 했었던 분이 알려준 참고하라는 공식
우형에서 사용하는 hikaricp 풀사이즈 공식
Tn : cpu 쓰레드 갯수
cm : 하나의 task에서 동시에 필요한 커넥션 갯수
pool size = Tm * (Cm-1) + (Tn/2)
히카리에서 제안하는 계산공식
Tm * (Cm-1) + 1
일을 하고 문제를 확인하고 해결을 할떄마다 항상 새로운걸 배우고 공부하게되는데 이런걸 먼저 확인하고 해결하는사람들은 참 존경스럽다..
참고했던 포스팅
https://techblog.woowahan.com/2664/
HikariCP Dead lock에서 벗어나기 (이론편) | 우아한형제들 기술블로그
{{item.name}} 안녕하세요! 공통시스템개발팀에서 메세지 플랫폼 개발을 하고 있는 이재훈입니다. 메세지 플랫폼 운영 장애를 바탕으로 HikariCP에서 Dead lock이 발생할 수 있는 case와 Dead lock을 회피할
techblog.woowahan.com
https://soongjamm.tistory.com/156
(성능테스트) Hikari pool connection 데드락 해결
안녕하세요. 최근 진행중인 프로젝트에서 최근 주문 API를 구현하고, JMeter를 이용해 부하 테스트를 진행한 적이 있습니다. 적은 트래픽에서는 문제가 없었는데, 부하를 일으키니 Hikari pool connectio
soongjamm.tistory.com