본문 바로가기

Programming/Spring

Spring 성능 부하 테스트 Thread Pool

저번에 쓴 글에 이어서 이번에는

좀 더 성능 오류와 서버가 죽는 문제를 해결해보려고 합니다.

 

 

저번 글에서는 서바가 일정 수치를 넘어서게 되면 계속 죽는 것을 그래프를 통해서 확인할 수 있었습니다.

그리하여 해당 로직을 처리하는 과정에 Thread Pool 을 추가하여 좀 더 요청에 대해 비동기적으로 처리하여 서버가 죽는 형태를 방지해보려고 합니다.

 

서버의 오류를 줄이는 대신에 TPS,Executed Tests의 값은 내려갔지만, 서버가 죽지 않고 계속 처리를 할 수 있게 되었습니다.

Thread Pool 

 

보통 각 요청 마다 처리할 수 있는 Thread를 생성하여 요청을 처리하게 되는데 이때 발생하는 문제로는 생성하는데 생각보다 많은 시간이 걸리게 됩니다.

처리속도 보다 더 빠르게 요청이 늘어난다면 스레드를 계속 생성하게 될 것이고, 컨텍스트 스위칭이 더 자주 발생 하게 됩니다.

*컨텍스트 스위칭 :  cpu 오버헤드 증가로 인한 cpu time 낭비 발생

 

결국 스레드 수 증가 -> 메모리 점점 고갈 

 

이러한 부분을 해결하기 위해 스레드 풀을 사용하게 됩니다.

 

스레드 풀은 요청이 들어오게 되면 위에 사진 처럼 큐 형태로 관리하면서 비어 있는 스레드에게 요청을 할당하는 방법입니다.

 

여기서 중요한 점은 큐에 대한 사이즈를 설정하지 않으면, 메모리를 고갈시키는 잠재적인 위험 요소가 될 수 있습니다.

 

 

private final ExecutorService executorService = Executors.newFixedThreadPool(10);

 

자바에 경우 이런 형태로 선언을 하여 사용할 수 있습니다.

executorService.submit(() -> ...

이런 형태로 해당 로직을 불러오게 되어 사용 할 수 있습니다.

'Programming > Spring' 카테고리의 다른 글

EntityManager란?  (0) 2025.04.13
nGrinder 부하 테스트  (1) 2024.12.09
[JPA] 랜덤값 가져오기  (0) 2024.09.29
[Project] Builder 패턴 사용  (0) 2024.08.21
Spring Boot JPA를 이용한 수정하기 PUT  (0) 2024.01.08