Servlet - 동시 요청 멀티쓰레드 처리를 지원함
WAS에서 연결마다 쓰레드를 만들게 되면
- 응답속도 감소와 Context Switching 비용도 생각을 해야함
- 제한이 없는 경우에 CPU, 메모리 임계점을 초과해서 서버가 다운될 가능성도 존재함.
Thread Pool 방식
- 위의 단점을 보완하기 위해서 미리 쓰레드를 생성하고 풀에 대기시켜둠.
- 톰캣 기준 하나의 쓰레드 풀에 200개의 쓰레드 생성 가능.
WAS의 주요 튜닝포인트
- 최대 쓰레드 수를 잘 설정해야함.
- 낮은경우 -> 많은 요청이 오게 된다면 요청에 대한 응답에 지연시간 발생.
- 높은경우 -> CPU, 메모리 리소스 임계점을 초과해서 위와 같은 서버다운이 발생가능함.
- 장애가 발생한다면 ? 클라우드의 경우엔 서버증설 후에 튜닝 / 클라우드가 없다면 평소에 튜닝을 잘해야 한다.
쓰레드 풀의 적정 숫자
- 대략적으로 감을 잡는거다.
- 성능테스트를 통해서 찾아가는 방식으로 시도 ex) 아파치 ab, 제이미터, nGrinder
WAS의 멀티 쓰레드 지원
- 개발자가 따로 멀티 쓰레드 관련 코드를 신경쓰지 않아도 괜찮음 -> 싱글 쓰레드처럼 개발
- 단 싱글톤 객체(서블릿, 스프링 빈)는 주의해서 사용해야한다.
출처 : 인프런 ( 김영한 - 스프링 MVC 1편 )