선박에서 수집되는 센서 데이터를 외부 서버로 실시간 전송하는 데이터 연동 시스템
- 문제
- 애플리케이션 네 개와 MySQL, Redis가 8코어 단일 서버를 공유하는 폐쇄망 환경
- MQTT 전송에 @Async만 붙여 사내 공통 스레드풀(pool-size="100", queue-capacity 미설정)을 그대로 사용
- 400 req/s 부하가 이어지자 스레드가 100개까지 늘면서 CPU 사용률 95%까지 상승
- 해결
- 공통 풀은 그대로 두고 MQTT 전송 전용 스레드풀만 분리 (Core 8, Max 16, Queue 200)
- 큐는 운영 유입량의 약 0.5초분만 대기시키고 큐와 최대 스레드가 모두 차면 호출 스레드가 직접 처리
- 결과
- 400 req/s 부하에서 CPU 사용률 95% → 60%로 감소