You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- 톰캣 기본 최대 스레드: 200
- 톰캣 기본 큐 크기 : 100
- Spring HikariCP 기본 커넥션 풀 크기: 10
maxConnections - 수락&처리할 수 있는 최대 동시 연결 수
maxThreads - 동시에 처리할 수 있는 요청 수 (최대 스레드 수)
만약 동시에 50개의 요청이 오면, 대기 상태인 20개의 스레드를 제외하고 30개의 스레드가 생성되어 50개의 요청을 동시 처리한다.
acceptCount - 대기 큐 크기
너무 크면 대기 시간이 길어짐.
너무 작으면 요청이 바로 거부됨.
대기열 큐에 저장되는 작업은 TCP 연결을 맺지 않고 있다.
minSpare - 기본적으로 대기 상태로 존재하는 스레드 수
🐶 부하테스트 (JMeter)
Number of Threads (users) : 스레드수 - 유저 수
Ramp-up period (seconds) : 지정된 유저가 모두 로딩될 시간
Loop Count : 반복 횟수
부하테스트 실행
- number of threas : 100, ramp-up period: 0, Loop Count: 10
으로 가정하고 부하테스트 진행.
결과
현재 EC2 서버에서의 테스트가 불가능한 상황이므로, localhost 환경에서 EC2 t2.micro 인스턴스의 가용 메모리(약 600~700MB)를 고려한 설정으로 테스트를 진행하였습니다.
테스트 환경의 주요 설정은 다음과 같습니다.
서버 환경:
Tomcat 메모리 설정: -Xms512m -Xmx768m (운영체제 메모리 사용량 고려)
데이터베이스 연결: 실제 서버와 동일한 DB Connection Pool 설정 적용
테스트 머신의 메모리 사용 제한: 최대 700MB로 조정하여 테스트 진행
이러한 설정을 바탕으로 로컬 환경에서 최대한 실제 EC2 환경과 유사한 조건을 구성하였으며, Tomcat 기본 설정 및 DB 연결이 동일하므로 해당 부분에서의 병목 현상은 발생하지 않을 것으로 예상됩니다.
🐶 적정 스레드 수
$$
적정 스레드 개수 = 사용 가능한 코어 개수 * (1 +대기시간/서비스시간)
$$
🐶 병목 분석
EC2 인스턴스 병목
요청당 50ms의 CPU시간을 소모한다고 가졍
$$
1000/50 = 20 TPS
$$
실제 안정적인 처리량: 10~15TPS로 추정
→ t2.micro에서 동시 10~15TPS 이상을 처리하면 CPU 병목 발생
메모리 병목 분석
평균 요청당 메모리 사용량: 10MB라고 가정
동시에 50개의 요청을 처리할 경우
$$
50 * 10MB = 500MB
$$
→ t2.micro 의 메모리는 1GB이므로 메모리 부족 가능성 있음.
톰캣 워커 스레드 병목
스레드당 평균 처리 시간: 50ms 로 가정
초당 처리 가능한 요청 수
$$
200 threads * 1000 / 50 = 4000 TPS
$$
→ 톰캣 기본 설정은 충분. EC2에서 먼저 병목 발생
데이터베이스 커넥션 병목
DB 최대 커넥션이 60개일 경우, 요청이 동시 1000개 이상이 되면 대기 시간이 발생
$$
1000 TPS * 50ms / 1000 ms = 50 connections
$$
🐶 필요한 서버 스펙 계산
스케일 업
인스턴스 타입
인스턴스 수
비용 (시간당)
월간 비용 (24x30)
c5.2xlarge
3대
1.02
$734.40
스케일 아웃
필요한 인스턴스 수
$$
1000/ 15 = 약 66 (인스턴스)
$$
인스턴스 66대 인스턴스가 각 DB 연결을 10개씩 유지(한다고 가정)하면 총 660개의 연결이 필요하므로 DB를 분리해야 함. (최대 DB 연결: 60)
The text was updated successfully, but these errors were encountered:
sansan20535
changed the title
Docs: 우리 서비스가 TPS 1000 이 된다 가정하고, 톰캣, 스프링 설정 값 고민해보기
Homework: 우리 서비스가 TPS 1000 이 된다 가정하고, 톰캣, 스프링 설정 값 고민해보기
Jan 24, 2025
🐶 기본 환경
인스턴스 사양
데이터베이스 연결
spring boot + tomcat 기본 설정
maxConnections - 수락&처리할 수 있는 최대 동시 연결 수
maxThreads - 동시에 처리할 수 있는 요청 수 (최대 스레드 수)
만약 동시에 50개의 요청이 오면, 대기 상태인 20개의 스레드를 제외하고 30개의 스레드가 생성되어 50개의 요청을 동시 처리한다.
acceptCount - 대기 큐 크기
너무 크면 대기 시간이 길어짐.
너무 작으면 요청이 바로 거부됨.
대기열 큐에 저장되는 작업은 TCP 연결을 맺지 않고 있다.
minSpare - 기본적으로 대기 상태로 존재하는 스레드 수
🐶 부하테스트 (JMeter)
부하테스트 실행
- number of threas : 100, ramp-up period: 0, Loop Count: 10 으로 가정하고 부하테스트 진행.결과
현재 EC2 서버에서의 테스트가 불가능한 상황이므로, localhost 환경에서 EC2 t2.micro 인스턴스의 가용 메모리(약 600~700MB)를 고려한 설정으로 테스트를 진행하였습니다.
테스트 환경의 주요 설정은 다음과 같습니다.
서버 환경:
Tomcat 메모리 설정: -Xms512m -Xmx768m (운영체제 메모리 사용량 고려)
데이터베이스 연결: 실제 서버와 동일한 DB Connection Pool 설정 적용
테스트 머신의 메모리 사용 제한: 최대 700MB로 조정하여 테스트 진행
이러한 설정을 바탕으로 로컬 환경에서 최대한 실제 EC2 환경과 유사한 조건을 구성하였으며, Tomcat 기본 설정 및 DB 연결이 동일하므로 해당 부분에서의 병목 현상은 발생하지 않을 것으로 예상됩니다.
🐶 적정 스레드 수
🐶 병목 분석
EC2 인스턴스 병목
→
t2.micro
에서 동시 10~15TPS 이상을 처리하면 CPU 병목 발생메모리 병목 분석
평균 요청당 메모리 사용량: 10MB라고 가정
동시에 50개의 요청을 처리할 경우
$$ 50 * 10MB = 500MB $$
→
t2.micro
의 메모리는 1GB이므로 메모리 부족 가능성 있음.톰캣 워커 스레드 병목
스레드당 평균 처리 시간: 50ms 로 가정
초당 처리 가능한 요청 수
$$ 200 threads * 1000 / 50 = 4000 TPS $$
→ 톰캣 기본 설정은 충분. EC2에서 먼저 병목 발생
데이터베이스 커넥션 병목
🐶 필요한 서버 스펙 계산
스케일 업
스케일 아웃
The text was updated successfully, but these errors were encountered: