본문 바로가기

스프링

[WAS] 쓰레드 풀

요청이 오면, 서블릿 컨테이너에서 요청에 맞는 서블릿을 연결시켜줘야 한다.

이때, 연결은 쓰레드 단위로 수행한다.

 

즉, WAS는 요청마다 쓰레드를 생성 해, 요청에 맞는 서블릿은 연결시켜준다.

이떄의 장단점은 아래와 같다.

 

장점

  1.  요청마다 쓰레드를 생성해 연결하니까, 동시 요청 처리 가능
  2. 자원의 한계까지 처리 가능
  3. 하나의 쓰레드가 지연되도, 나머지 쓰레드들은 정상 수행

단점

  1. 쓰레드 생성 비용은 매우 비싸고, 큰 문맥 교환 비용이 발생 ➡️ 응답 속도 성능 🔽
  2. 쓰레드의 생성에는 제한이 없다 ➡️  많은 요청이 들어오면, 쓰레드를 계속 생성하다, 과부하로 서버가 죽는다.

쓰레드 풀

WAS에서 일정 수만큼의 쓰레드를 미리 만들어서(톰캣의 Default는 200개), 쓰레드 풀에 넣어놓고 사용한다.

즉, 쓰레드를 생성-종료가 아닌 사용-반납의 개념으로 사용하는 것...

 

장점

  • 비싼 쓰레드 생성시 발생하는 높은 비용을 아낄 수 있다. ➡️ 응답 속도의 향상
  • 쓰레드의 최대치가 정해져 있으므로, 서버가 쉽게 안죽는다.

실무에서의 팁

WAS의 주요 튜닝 포인트 = 최대 쓰레드 수.

  • 이 값이 너무 으면? ➡️ 서버 자원을 크게 아낄 수 있지만, 응답 지연이 금방, 자주 된다.
  • 이 값이 너무 으면? ➡️ 서버 자원의 초과로 서버가 죽을 수 있다.

그렇다면, 적합한 최대 쓰레드 풀은 어떻게 찾을까?

  • 아파치 AB, 제이미터, nGrinder 등의 도구로 성능 테스트를 통해 찾음

 

 

강의 출처

https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1