본문 바로가기
T.I.L. :: Today I Learned/항해99 14기 본과정

Day 64. 랜덤 Pending 다시 등장.. 두두등장...

by DaSsom 2023. 6. 5.

펜딩 또 터짐.. 진짜 제발 ~ 왜 또 나오는건지 어디서 나오는건지 열심히 조사해본 결과.

일단 가장 의심스러운 곳은 SSE 기능이다. 사용자에게 알림을 전송하기 위해 로그인시 회원은 sse 기능에 구독을 한다. 그 이후 그 구독이 끊어지지 않고 db를 잡고 있어서 이녀석이 임계점에 다다르면 Hikari DeadLock이라는 상황에 빠져 DB 요청이 가는 족족 모든 순간에 pending(보류중)이 뜬다. 

그 때 만난 메세지 : jdbc.spi.SqlExceptionHelper : HikariPool-1 - Connection is not available, request timed out after 30000ms. org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction;

 

HikariCP Dead lock??

 

HikariCP Dead lock에서 벗어나기 (이론편) | 우아한형제들 기술블로그

{{item.name}} 안녕하세요! 공통시스템개발팀에서 메세지 플랫폼 개발을 하고 있는 이재훈입니다. 메세지 플랫폼 운영 장애를 바탕으로 HikariCP에서 Dead lock이 발생할 수 있는 case와 Dead lock을 회피할

techblog.woowahan.com

 

음 그래서 어제 서버 사양과 DB의 사양을 올렸으나 아무래도 근본적인 해결책은 아닌 것 같다. 그도 그럴것이 db에 락이 걸리는데 사양을 올린다고 뭐가 되기를 바란 것은 접시에 물떠다놓고 기도메타 들어가는거랑 뭐가 다른건가 싶기도 하고 ㅋㅋ

 

그래서 일단 우선적으로 적용했던건 스레드 타임을 조절하는 설정을 properties 파일에 추가하는거였다. 

https://imksh.com/73

 

[Spring] HikariCP Dead lock 벗어나기

22.06.04) 해당 글은 Dead Lock이 아닌 단순 커넥션 누수의 문제입니다. ※ Hikari, Connections pool, dead lock에 대한 설명이 포함되어 있지 않습니다 결론부터 말하자면 저의 경우엔 개발자의 실수였습니다.

imksh.com

 

이건 결국 근본적인 해결책이 아니었음. 여전히 나타나는 pending. 다음으로 시도해본 Nginx 설정 변경하기

Nginx에 proxy_http_version을 따로 설정하지 않으면 서버에 HTTP/1.0으로 연결을 하게 되는데 이 과정에서 서버측에 메세지를 전송하지 못하면서 문제가 발생할 수 있다고 했다. 그래서 버전을 1.1로 명시해주고 Connection 헤더를 없애주었다. 

https://seungtaek-overflow.tistory.com/10

 

[Nginx] Proxy 상황에서 Connection 유지하기

예전에 Connection 헤더 문제로 삽질 했던걸로 최근에 또 삽질을 하게 돼서 이번에는 확실하게 정리를 하려고 한다. 3줄 요약 Nginx는 upstream 서버로 proxy를 할 때 HTTP 버전을 1.0으로, Connection 헤더를 cl

seungtaek-overflow.tistory.com

 

응 이것도 안됨 수고 ~

 

아몰랑 !!