동시 요청 - 멀티 쓰레드

Do_It·2024년 3월 20일

WAS에 요청이 왔을때, 서블릿에게 요청을 누가하지?

그것을 바로 스레드가 한다.

쓰레드

  • 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드
  • 쓰레드가 없다면 자바 애플리케이션 실행이 불가능
  • 쓰레드는 한번에 하나의 코드 라인만 수행

쓰레드 풀

연결 요청이 오면 쓰레드 풀에 있는 스레드를 사용하며 스레드를 사용후 다시 쓰레드 풀에 반납한다.

최대 스레드가 모두 사용중이며 스레드가 없으면
기다리는 요청은 거절하거나 특정 숫자만틈만 대기하도록 설정할 수 있음

스레드가 미리 생성되어 있으므로, 스레드를 생성하고 종료하는 비용이 절ㅇㄱ됨

실무 팁

  • WAS의 주요 튜닝 포인트는 최대 쓰레드 수이다.
  • 이 값을 너무 낮게 설정하면?
    동시 요청이 많으면 서버 리소스는 여유롭지만,클라이언트는 금방 응답 지연
  • 이 값을 너무 높게 설정하면?
    동시 요청이 많으면 cpu가 감당하지 못하고 서버 다운

쓰레드 풀의 적정 숫자는 어떻게 찾을까?

  • 애플리케이션 로직의 복잡도,CPU,메모리 리소스 상황에 따라 모두 다름

  • 그래서 성능 테스트를 해봐야 함!
    최대한 실제 서비스와 유사하게 성능 테스트 시도
    제이미터,아파치 ab 등으로 병목 포인트를 찾아서 튜닝을 하면 됨

핵심은 WAS의 멀티 스렉드가 지원된다는 것
개발자가 멀티 쓰레드 관련 코드를 신경쓰지 않아도 된다는 것
멀티 쓰레드 환경이므로 싱글톤 객체는 주의해서 사용해야함!!
왜냐하면 싱글톤의 공유 변수 값이 멀티 스레드로 공유되기 때문에 값이 어떻게 변할지 모를 수 있기 때문이다.

profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글