문제 상황
Thread starvation or clock leap detected
이 뜨면서 cpu 상태 99%로 오르다가 뻗어버림
문제 원인
- 카드 발급 로직을 Async 로 사용하는데, 사용하며 쓰레드 풀의 커넥션이 부족하여 데드락이 걸렸던 것으로 추정
https://velog.io/@mbsik6082/Spring-Data-JPA-Transaction-Propagation-EntityManager-PersistContext%EC%97%90-%EA%B4%80%ED%95%9C-%EA%B3%A0%EC%B0%B0
처리
AsyncConfig 의 maxPool 사이즈 조정
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
int processors = Runtime.getRuntime().availableProcessors();
log.info("processors count {}",processors);
executor.setThreadNamePrefix("CardAsync-"); // thread 이름 설정
executor.setCorePoolSize(processors); // 기본 스레드 수
executor.setMaxPoolSize(processors*2); // 최대 스레드 개수
executor.setQueueCapacity(20); // 최대 큐 수
executor.setKeepAliveSeconds(60); // maxpool size로 인해 덤으로 더 돌아다니는 튜브는 60초 후에 수거해서 정리
executor.initialize(); // 초기화후 반환
return executor;}
그 외 공부할 것
- Tranasactional 어노테이션의 부모 자식 관계
'WEB > Backend' 카테고리의 다른 글
[Spring Boot] Not enough space 메모리 부족 (0) | 2024.06.21 |
---|---|
[쿼리 튜닝] DB CPU가 99% - 쿼리 중 일부 컬럼만 가지고 오기 (0) | 2024.06.21 |
[Spring Boot] HeapDumpOnOutOfMemoryError : java heap size 에러 해결 과정 (0) | 2024.06.21 |
백엔드 면접 질문 정리 (0) | 2022.03.29 |
각종 WEB 지식(1) : HTTP, REST, JSON에 대하여 (1) | 2020.10.06 |