본문 바로가기
Infra & Server Dev

톰캣 튜닝(성능개선)

by 필팔청춘 2013. 10. 18.




성능이 떨어지는(느리고 답답한) 애플리케이션을 좋아하는 사람은 없음.

Tomcat은 성능이 점점 좋아지므로 항상 최신 버전을 사용할 것.


1. JVM heap 메모리 크기 변경

- $CATALINA_HOME/bin/catalina.sh 파일에 아래 내용을 추가한다.

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m

-Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m

-XX:MaxPermSize=512m -XX:+DisableExplicitGC"

(*) JVM의 기본 heap 메모리 사이즈는 64MB 이므로 최소한 -server, -Xms, -Xmx 옵션은 설정해야 한다.

(*) JVM 옵션 목록: http://blogs.sun.com/watt/resource/jvm-options-list.html

(*) Blog2Book, 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기 추천함.


2. JRE 메모리 누수 처리

- Tomcat 6.0.26부터 메모리 누수를 탐지하는 기능이 추가되었다.

- $CATALINA_HOME/conf/server.xml 파일에서 아래 코드를 찾아 주석을 해제한다.

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />


3. 스레드 풀(thread pool) 설정

- 클라이언트의 요청을 처리하는 스레드 수 설정. 기본 값은 200이며 그 이상의 요청이 있을 경우

"connection refused" 메시지를 리턴한다.

- $CATALINA_HOME/conf/server.xml 파일에서 <Connector />의 속성을 수정한다.

<Connector port="8080" address="localhost" maxThreads="250" maxHttpHeaderSize="8192"

emptySessionPath="true" protocol="HTTP/1.1" enableLookups="false" redirectPort="8181" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />

- 만약 maxThreads 값이 최대 값인 750을 넘을 경우 두 대의 Tomcat을 이용해 클러스터링 구성을 하는 것이 좋다.

하나의 Tomcat에 maxThreads=1000을 설정하지 말고 두 개의 Tomcat에 각각 maxThreads=500 설정을 하라는 뜻이다.

(*) 잘 모르겠으면 대충 설정하지 말고 Tomcat을 기본값으로 운영하면서 숫자를 조금씩 조정해야 함.


4. 압축

- 특정 mime-type에 대해 데이터를 압축하여 전송할 수 있다.

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8181"

compression="500" compressableMimeType="text/html,text/xml,text/plain,application/octet-stream" />

- compression="500"은 500 bytes 이상의 파일만 압축하라는 뜻이다.

- 닥치고 압축하려면 compression="on"으로 설정한다.

(*) HTTP compression: 서버에서 파일을 압축한 뒤 클라이언트로 전송하는 기능임.

Tomcat의 고유한 기능이 아니라 HTTP 스펙에 있는 기능임.


5. 데이터베이스 성능 튜닝

- NamedQuery를 쓴다면 애플리케이션 초기화할 때 모두 로드할 것.

(*) JDBC를 사용한다면 try...catch...finally를 사용하여 반드시 DB connection을 close 할 것.


6. Tomcat Native Library

- Apache Portable Runtime(APR)이라는 게 있는데 이게 성능 향상이 많은 도움을 줌.

- 설치방법: http://www.techbrainwave.com/?p=1017(영어)

(*) 설치방법: Tomcat Native Library – Apache Portable Runtime(APR) 설치(한글)

(*) 굳이 Apache httpd와 연동할 필요가 없는 이유임.

(*) 진실 혹은 거짓: Tomcat과 Apache httpd를 연동하는게 항상 성능을 향상시키는가?


7. 기타

- 웹 브라우저 캐시 사용함으로 설정할 것.

- 서버 재시작시 반드시 자동으로 Tomcat이 재시작 되도록 설정할 것.

- HTTPS가 HTTP에 비해 약간 느리긴 하지만 보안이 중요하다면 HTTPS를 사용할 것.


튜닝한다고 설치기 전에 정말 튜닝을 해야만 하는지 다시 한 번 생각해 보자.


출처 : http://www.techbrainwave.com/?p=836