Tomcat JVM 힙 메모리(Heap Memory) 최적화 설정 가이드
서론
Tomcat 기반의 Java 애플리케이션을 운영하다 보면 가장 빈번하게 발생하는 장애 중 하나가 바로 OutOfMemoryError입니다. 서버의 물리적 메모리가 충분하더라도 JVM에 할당된 메모리가 적절하지 않으면 서비스는 쉽게 멈출 수 있습니다. 이번 포스팅에서는 실무에서 필수적인 JVM 메모리 설정 파라미터를 정리합니다.
1. 힙 메모리(Heap Memory) 핵심 설정
힙 메모리는 객체가 생성되고 상주하는 공간입니다. 가장 중요한 두 가지 설정은 -Xms와 -Xmx입니다.
- -Xms: JVM이 시작될 때 할당하는 초기 힙 크기입니다.
- -Xmx: JVM이 가질 수 있는 최대 힙 크기입니다.
실무 권장 설정 (setenv.sh)
Tomcat의 bin/setenv.sh(윈도우는 setenv.bat) 파일을 생성하거나 수정하여 설정합니다.
Tomcat 성능 튜닝의 핵심: maxThreads, maxConnections, acceptCount 완벽 이해
서론
대규모 트래픽이 발생하는 환경에서 WAS(Tomcat)가 응답하지 않거나 속도가 급격히 느려진다면, 가장 먼저 의심해야 할 곳은 쓰레드 풀(Thread Pool) 설정입니다. Tomcat의 server.xml에서 설정하는 세 가지 핵심 파라미터의 관계를 정확히 이해해야 서비스 장애를 예방할 수 있습니다.
Tomcat 요청 처리의 3단계 레이어
1. acceptCount (대기열 크기)
모든 쓰레드가 사용 중일 때, 운영체제(OS) 수준에서 요청을 대기시킬 큐의 크기입니다. 이 큐마저 가득 차면 클라이언트는 Connection Refused 에러를 받게 됩니다.
- 실무 팁: 너무 크게 설정하면 클라이언트는 타임아웃에 걸릴 때까지 하염없이 기다리게 되므로 적절한 제한이 필요합니다.
2. maxConnections (최대 연결 수)
Tomcat이 동시에 유지할 수 있는 최대 네트워크 연결 수입니다. 쓰레드 수보다 훨씬 크게 설정하여(NIO 방식), 실제 처리 중이지 않은 연결도 잠시 붙들어 둘 수 있습니다.
Spring Boot @Async로 비동기 처리 구현하기: 서비스 응답 속도 개선
서론
사용자가 요청을 보냈을 때 이메일 발송, 리포트 생성, 외부 API 호출 등 시간이 오래 걸리는 작업이 포함되어 있다면 응답 속도가 느려질 수밖에 없습니다. 이럴 때 **비동기 처리(Asynchronous Processing)**를 도입하면, 핵심 로직만 즉시 응답하고 무거운 작업은 백그라운드에서 실행하여 사용자 경험을 크게 향상시킬 수 있습니다.
@Async 활성화 및 설정
Spring Boot에서 비동기 기능을 사용하려면 먼저 @EnableAsync 설정을 추가해야 합니다.
1. 비동기 설정 클래스
기본 ThreadPool 대신 커스텀 설정을 통해 안정성을 확보하는 것이 좋습니다.