728x90
반응형
서블릿은 어떻게 실행될까?
- 서블릿을 실행하는 주체는 쓰레드이다.
- 쓰레드를 할당 받아 해당 서블릿을 쓰레드가 수행하게 된다.
쓰레드 란?
- 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드다.
- 쓰레드는 한번에 하나의 코드 라인만 수행한다.
- 동시 처리가 필요하면 쓰레드를 추가로 생성해야 된다.
아래에 자세한 설명을 적어 뒀습니다.
https://vprog1215.tistory.com/166
단일요청 쓰레드
만약 쓰레드가 하나뿐이라면 어떻게 될까?
- 1. 요청이 들어온다.
- 2. 쓰레드를 할당한다.
- 3. 서블릿을 쓰레드가 실행킨다.
- 4. 서블릿에서 응답을 보낸다.
요청이 2개일 경우에는?
- 쓰레드가 지연이 되어 계속 사용중일때
- 요청이 들어오면 대기를 해야 된다.
해결법
그렇다면 쓰레드를 늘려야 된다고 생각 했을거다.
다음과 같은 방법이 있다.
- 1. 요청마다 쓰레드를 생성한다.
- 2. 쓰레드 풀에 쓰레드를 미리 생성해 둔다.
요청마다 쓰레드를 생성한다.
사실 좋은 방법이 아니다.
장점
- 동시 요청을 처리 가능하다.
- 리소스가 허용할 때 까지 처리 가능
- 하나의 쓰레드가 지연되어도 다른 쓰레드는 정상동작 한다.
단점
- 쓰레드 생성비용이 비싸다
- 요청마다 쓰레드를 계속 만들면 응답속도가 느려진다. - 쓰레드는 컨텍스트 스위칭 비용이 발생한다.
- 쓰레드 생성에 제한이 없다.
- 무조건 생성하게 되면 메모리 사용량을 초과하여 서버가 죽을수 있다.
쓰레드 풀을 사용한다.
- 쓰레드 풀이란 미리 쓰레드를 생성해 두는 공간을 말한다.
- 쓰레드 풀에 생성가능한 쓰레드의 개수를 지정한다.
- 톰캣을 최대 200개가 기본설정이다
동작방식
- 쓰레드가 필요시 미리 생성해둔 쓰레드를 사용한다.
- 사용을 종료하면 쓰레드 풀에 반납한다.
- 최대 쓰레드 개수를 넘기면 그뒤에 요청들은 대기한다.
장점
- 쓰레드가 미리 생성되어 있어 생성, 종료 비용이 줄어든다.
- 너무 많은 요청이 와도 기본요청들은 안전하게 처리가 된다.
쓰레드 관리
- WAS 의 주요 튜닝 포인트는 최대 쓰레드 수이다.
- 이값을 낮게 설정하면?
- 요청이 많을때 처리 하는 수가 적어 응답지연이 된다. - 너무 높게 설정하면?
- 메모리 사용량 초과로 죽을수 있다. - 장애가 생겼을떄?
- 클라우드면 서버를 늘린다.
- 그렇지 않으면 튜닝한다.
쓰레드의 적정 숫자
- 로직의 복잡도 + CPU 메모리 + IO 리소스 를 고려 해서 정해야 된다.
- 대략적으로 감을 잡고 성능테스트를 거쳐야 한다.
WAS의 멀티 쓰레드 지원
- 사실 멀티 쓰레드에 대한 부분은 WAS가 처리 한다.
- 개발자가 멀티 쓰레드 관련 코드를 신경쓰지 않아도 된다.
- 개발자는 마치 싱글쓰레드 프로그래밍을 하듯 편리하게 소스 코드 개발
- 멀티쓰레드 환경일때는 싱글톤 객체는 주의해서 사용하자
- 멤버변수를 잘못사용하는 경우 망한다.
728x90
반응형
'Spring > spring framework 구현 스터디' 카테고리의 다른 글
[Spring] Servlet 다루기 3: HttpServletResponse 예제 (0) | 2021.10.11 |
---|---|
[Spring] Servlet 다루기 2: HttpServletRequest 예제 (0) | 2021.10.10 |
[Spring] Servlet 다루기 1: Servlet, HttpServletRequest (0) | 2021.10.09 |
[Spring] Servlet (0) | 2021.10.04 |
[Spring] Web server와 Was server (0) | 2021.10.04 |
댓글