WAS ThreadPool 크기, Docker CPU 제한, JMeter 요청 쓰레드 수의 조합에 따라 WAS 성능 분석
도구
- WAS: 직접 만든 서버(`THREAD_POOL_SIZE` 설정)
- Docker: `--cpus` 옵션으로 CPU 코어 수 제한
- JMeter: 동시 사용자 수 (`JMeterThreads`) × 반복 수 (`LOOPS=10`) 설정
측정 지표
- `AvgElapsed`: 평균 응답시간 (ms)
- `MaxElapsed`: 최대 응답시간 (ms)
- `AvgLatency`: 실제 서버 처리 시간 (ms)
- `AvgConnect`: 커넥션 성립까지의 시간 (ms)
- `SuccessRate`: 요청 성공률
| 설정 항목 | 값 |
|---|---|
| ThreadPool | 10, 50, 100 |
| Docker 제한 CPU | 1, 2, 4 |
| JMeter 쓰레드 수 | 10, 50, 100 (× 10회 반복) |
총 27개 경우의 테스트 수행, 각 조합당 100개 요청
| CPU | JMeterThreads | AvgElapsed | MaxElapsed | AvgLatency |
|---|---|---|---|---|
| 1 | 10 | 5.54 ms | 183.0 | 5.40 ms |
| 1 | 50 | 2.67 ms | 19.0 ms | 2.60 ms |
| 1 | 100 | 2.31 ms | 17.0 ms | 2.22 ms |
| 2 | 10 | 4.08 ms | 121.0 ms | 3.92 ms |
| 2 | 50 | 2.40 ms | 17.0 ms | 2.27 ms |
CPU 1 제한 조건에서도 요청 수 증가에 잘 대응함
그러나 MaxElapsed가 높아지는 경우가 존재 → 부하 스파이크에 취약
| ThreadPool | JMeterThreads | AvgElapsed | P95Elapsed | MaxElapsed |
|---|---|---|---|---|
| 10 | 10 | 5.54 ms | 6.05 ms | 183.0 ms |
| 50 | 10 | 1.51 ms | 2.0 ms | 3.0 ms |
| 100 | 10 | 4.64 ms | 6.05 ms | 158.0 ms |
ThreadPool 50에서 가장 빠르고 안정적
ThreadPool 100은 성능 하락 및 최대 응답시간 급등
| ThreadPool | CPU | AvgElapsed | MaxElapsed | AvgLatency |
|---|---|---|---|---|
| 10 | 1 | 2.31 ms | 17.0 ms | 2.22 ms |
| 50 | 1 | 2.71 ms | 27.0 ms | 2.62 ms |
| 100 | 1 | 4.64 ms | 158.0 ms | 4.46 ms |
ThreadPool 100은 컨텍스트 스위칭 비용 증가로 지연 발생
ThreadPool 50이 평균/최대 응답시간 모두에서 가장 안정적
물론 모두 예측일 뿐이므로 명확한 원인 분석이 필요하다.