Spring
Spring Boot - 톰캣 Thread Pool(스레드 풀)
victory-line
2024. 12. 30. 23:36
스프링 부트 애플리케이션은 내장된 서블릿 컨테이너(Tomcat)에서 클라이언트 요청을 처리함.
이 때 톰캣의 스레드 풀이 효율적인 요청을 관리함.
스레드 풀이란?
-> 미리 일정 개수의 스레드를 생성하여 관리하는 기법
스레드 풀의 장점
- 스레드 생성 비용 감소: 새로운 스레드를 생성하는 데 필요한 시스템 자원을 절약
- 효율적인 리소스 사용: 미리 생성된 스레드를 재활용하여 서버 리소스를 최적화
- 안정적인 성능: 설정된 제한을 통해 과도한 요청으로 인한 성능 저하를 방지
톰캣의 스레드 풀은 총 세가지 단계로 동작함
1. 초기화 : 애플리케이션이 시작 될 때 서블릿 컨테이너에서 미리 설정된 수의 스레드를 생성해서 스레드 풀에 보관함.
2. 요청 처리 : 클라이언트로부터 HTTP 요청이 들어오면 스레드 풀에서 유휴 상태인 스레드가 할당되어 해당 요청을 처리함.
3. 반환 : 요청 처리가 완료되면 스레드는 다시 스레드 풀로 반환됨.
스프링 부트는 요청때마다 스레드를 다시 생성하지 않고 미리 생성된 스레드를 재사용 해서
자원을 효율적으로 관리함.
application.properties와 application.yml에서 스레드 풀 설정을 할 수 있음(예제는 기본값임)
# application.properties
# 최대 스레드 수 설정
server.tomcat.threads.max=200
# 최소 유휴 스레드 수 설정
server.tomcat.threads.min-spare=10
# 최대 대기 요청 수 설정
server.tomcat.accept-count=100
해당 값으로 설정할 경우
server.tomcat.threads.max=200 : 최대 200개의 요청을 동시에 처리
server.tomcat.threads.min-spare=10 : 항상 최소 10개의 스레드가에 유휴 상태로 대기
server.tomcat.accept-count=100 : 모든 작업 스레드가 사용 중일 때, 최대 100개의 요청을 대기열에 보관
결론 : 스프링 부트는 내장된 톰캣의 스레드 풀로 요청을 효율적으로 관리함.