Tomcat과 Jetty는 모두 자바 기반의 웹 서버 및 서블릿 컨테이너로 유명하다. 그러나 대량의 트래픽 처리 및 높은 성능을 요구하는 웹 애플리케이션을 구축할 때 추가적인 성능 튜닝이 필요할 수 있다. 이 글에서는 Tomcat과 Jetty의 성능을 향상시키기 위한 몇 가지 방법을 알아보겠다.
1. 스레드 풀 설정 조정
Tomcat 및 Jetty 모두 기본적으로 스레드 풀을 사용하여 클라이언트 요청을 처리한다. 하지만 기본 설정은 일반적인 애플리케이션에 적합하며 많은 양의 동시 요청을 처리하는 경우에는 성능 저하가 발생할 수 있다. 스레드 풀의 크기를 증가시켜 병렬 처리 능력을 향상시키는 것이 좋다. 일반적으로 CPU 코어 수에 따라 적절한 스레드 풀 크기를 설정하면 좋은 결과를 얻을 수 있다.
Tomcat에서 스레드 풀 설정
Tomcat의 server.xml
파일에서 Connector
구성 요소를 찾아 maxThreads
및 acceptCount
속성을 조정할 수 있다. maxThreads
는 풀에 생성될 최대 스레드 수를 설정하고, acceptCount
는 풀에 대기 중인 요청의 최대 수를 설정한다.
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
acceptCount="200"
/>
Jetty에서 스레드 풀 설정
Jetty의 jetty.xml
파일에서 ThreadPool
구성 요소를 찾아 maxThreads
및 minThreads
속성을 조정할 수 있다. maxThreads
는 최대 스레드 수를 설정하고, minThreads
는 최소 스레드 수를 설정한다.
<New id="ThreadPool" class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<Set name="maxThreads">200</Set>
<Set name="minThreads">10</Set>
</New>
2. 정적 콘텐츠 캐싱
웹 애플리케이션에서 정적 콘텐츠는 매우 자주 요청되는데, 매번 요청이 들어올 때마다 동적으로 생성할 필요는 없다. Tomcat 및 Jetty에서는 정적 콘텐츠를 캐싱하여 중복된 요청을 처리할 필요 없이 빠르게 응답할 수 있다. 정적 콘텐츠의 캐싱 설정은 웹 서버의 성능을 크게 향상시킬 수 있다.
Tomcat에서 정적 콘텐츠 캐싱 설정
Tomcat의 web.xml
파일에 다음과 같이 캐시 관련 설정을 추가한다.
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>cacheMaxSize</param-name>
<param-value>512000</param-value>
</init-param>
<init-param>
<param-name>cacheObjectMaxSize</param-name>
<param-value>4096</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
Jetty에서 정적 콘텐츠 캐싱 설정
Jetty의 jetty-web.xml
파일에서 다음과 같이 캐시 관련 설정을 추가한다.
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="cacheControl">max-age=3600,public</Set>
<Set name="maxCachedFiles">512</Set>
<Set name="maxCachedFileSize">4096</Set>
</Configure>
3. JVM 옵션 최적화
Tomcat 및 Jetty는 JVM 위에서 실행되므로 JVM 옵션의 최적화도 성능 향상에 큰 영향을 미칠 수 있다. 메모리 할당, GC 수행 등과 관련된 JVM 옵션을 조정하여 웹 서버의 성능을 최적화할 수 있다.
Tomcat에서 JVM 옵션 설정
Tomcat의 setenv.sh
파일(또는 setenv.bat
파일)에 다음과 같이 JVM 옵션을 추가한다.
export CATALINA_OPTS="-Xms2048m -Xmx4096m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
Jetty에서 JVM 옵션 설정
Jetty의 jetty.sh
파일(또는 jetty.bat
파일)에 다음과 같이 JVM 옵션을 추가한다.
export JAVA_OPTIONS="-Xms2048m -Xmx4096m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
위의 예제는 Tomcat 및 Jetty의 성능 튜닝을 위해 몇 가지 가이드라인을 제공한다. 실제로는 각 애플리케이션과 환경에 따라 적절한 설정을 찾아야 하며, 프로파일링 및 테스트를 통해 성능 문제를 해결해야 한다.
참고 자료
- Apache Tomcat Documentation
- Eclipse Jetty Documentation
- Improving the Default Static File Servlet in Tomcat
- Jetty: How to Perform Tuning for Best Performance