Skip to content
2018.07.26 23:41

Tomcat7 Tuning

조회 수 126 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

1. 메모리 관련문제

2. JVM 파라미터 최적화

3. OS 수준의 최적화를 통한 성능 개선

 

01.png

 

[톰캣에 영향을 주는 요소들]

 

[톰캣 컴포넌트 튜닝]

스레드 튜닝, 포트 커스터마이즈, JVM 튜닝 등 서버 성능에 영향을 미치는 다양한 설정 가능

 

1. Connector

- JAVA HTTP Connector : HTTP 프로토콜을 기반. HTTP/1.1 프로토콜만 지원

 

- JAVA AJP Connector : AJP(아파치 JServ프로토콜)와 AJP를 통한 웹 서버 통신을 기반으로 하며 자바 서블릿 컨테이너를 인터넷에 노출하고 싶지 않을 때 AJP Connector를 사용해 톰캣 7에서 SSL Termination을 처리하지 않는 상황이라면 AJP Connector를 매우 유용하게 활용할 수 있다 - 구현체로는 mod_jk, mod_proxy등이 있다 (http://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html)

 

※ SSL Termination은 SSL 처리를 다른 기기에 맞겨서 동시에 보다 많은 요청, 세션, 쿠키등을 처리 가능하게 함

 

- APR(HTTP/AJP) Connector : 확장성, 성능, 다른 웹 서버와의 협력 작업 상황에서 능력을 발휘. Open SSL,공유 메모리, 유닉스 소켓 등과 같은 부가 기능 제공 (http://tomcat.apache.org/tomcat-7.0-doc/config/apr.html)

 

2. 스레드 최적화

- Thread pool : 톰캣이 수락할 수 있는 연결 수 또는 서버가 수락할 수 있는 요청수로 보면 된다. Shared Pool, Dedicated Pool 2가지고 있고 serverlxml을 이용해 풀을 설정할 수 있다.

전용 thread pool ex>

<Connector port="8023" maxHttpHeaderSize="8192"

                 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

                 enableLookups="false" redirectPort="8443" acceptCount="100"

                 connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />

     <!-- Define an AJP 1.3 Connector on port 8009 -->

    <Connector port="9023"

               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="UTF-8" maxKeepAliveRequests="-1" maxProcessors="500" maxThreads="250"/>

 

- maxThreads : 서버가 수락할 수 이쓴 최대 요청 수로 default는 150이며 서버의 CPU 사용량이 높으면 thread값을 줄이고 낮으면 높여준다. (DB연결, 네트워크 대역폭 등 다른 resource도 같이 고려해야함)

 

- maxKeepAlive : 종료되지 않고 동시에 대기할 수 있는 TCP 연결 수를 정의하며 default = 1 (비활성화)

    when = 1 

             톰캣에서 SSL Termination 수행하지 않음 / 부하 균형 기법 사용 / 동시에 더 많은 사용자를 수용

     when > 1 

             톰캣에서 SSL Termination 수행 / 적은 동시 사용자를 수용

 

3. JVM 튜닝

톰캣 Default Hep memory = 256MB

 

※ JMAP (메모리 맵) - 공유된 자바 가상 메모리 전체 못브을 출력하는 유틸로 ./jmap -heap <process id> 로 사용

 

 

옵션

설명

 -dump

자바 힙을 hprof 바이너리 형식으로 덤프 

 -finalizer info

소멸(finalization)을 기다리는 오브젝트 정보 출력

 -heap

heap 요약 정보 출력

 -histo

heap histogram 출력

 -permstat

 자바 힙의 영구 세대(Permanent generation)를 클래스 로더 통계로 출력

 

 

 

02.png

 

 

4. Garbage Collection

- GC 호출되면 메모리에 있는 모든 비활성 오브젝트를 수집해서 메모리를 정리

   

5. JVM 옵션

Java Hotspot은 VM 옵션을 크게 표준 옵션 / 비표준 옵션으로 구분

- 표준 옵션 : 기본 설정

- 비표준 옵션 : -x, -xx. 행동 옵션(VM의 기본 행동을 바꾸는 옵션) / 성능 튜닝 옵션(VM 선응을 최적화하는 옵션) / 디버깅 옵션(로그 추적 기능 활성화 관련 옵션)

 

 

 

옵션

파라미터

설명

행동옵션 

-XX:+ScavengeBeforeFullGC

전체 GC에 앞서 젊은 세대 GC를 수행 

 

--XX:-UseParallelGC

병렬 가비지 콜렉션으로 빠른 GC(Scavenge)수행 

성능옵션

-XX:MaxNewSize=size

new 영역의 최대 크기(byte단위)

 

 -XX:MaxPermSize=64m

Perm 영역 크기(-Xmx값 초과시)

 

-Xms 

톰캣 시작시 최소 힙 메모리

 

-Xmx

인스턴스에 할당할 최대 메모리

 

-Xss

힙 스택 크기

 디버깅

-XX:-CITime

 JIT 컴파일러가 소비한 시간 출력

 

-XX:ErrorFile=./hs_err_pid<pid>.log

 발생한 에러를 기록할 파일 지정

 

-XX:HeapDumpPath=

./java_pid<pid>.hprof

 Heap Dump용 디렉토리 경로나 파일명

 

-XX:-HeapDumpOnOutOfMemoryError

 java.lang.OutOfMemoryError가 발생하면 힙을 파일로 덤프

 

-XX:OnError="<cmd args>;<cmd args>"

치명적 에러 발생시 사용자가 정의한 명령 실행

 

-XX:OnOutOfMemoryError="<cmd args>;"

 처음으로 OOM이 발생하면 사용자가 정의한 명령 실행

 

-XX:-PrintClassHistogram

 Ctrl-Break 를 눌렀을 때 클래스 인스턴스의 히스토그램 출력

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.thml

 

 

- GC 로그에 표시된 파라미터

[%T %B->%A(%C), %D]

 

%T : 빠른 GC단계에서는 'GC'로 전체 GC를 수행할 때는 'Full GC:'로 표시하고 빠른 GC는 new 영역에서 살아있는 오브젝트만 수집하고 Full GC수행시 자바 힙의 모든 공간에서 오브젝트를 수집한다

 

%B : GC 실행하기 전의 자바 힙 크기(KB단위)

 

%A : GC 실행한 후의 자바 힙 크기(KB단위)

 

%C : 전체 자바 힙의 현재 용량(KB단위)

 

%D : 콜렉션에 걸린 시간(초)

 

 

- SurvivorRatio : 생존 공간 크기에 대한 eden의 비율 정의. default는 9로 각 생존 공간의 크기보다 eden이 8배 크다. -XX:SurvivorRatio=<size>

Xmn / (SurvivorRatio + 2) = 각 생존 공간의 크기

(Xmn / (SurvivorRatio + 2)) * SurvivorRatio = eden 크기

 

6. OS 튜닝

64bit VS 32bit : 32bit가 64bit보다 조금 더 빠르나 64bit는 더 큰 메모리를 사용할 수 있고 보통 4GB 이상의 메모리 할당 가능 (64bit JVM 사용하려면 32bit JVM에 비해 30% 메모리 더 추가)

 

 

출처 : http://becko.tistory.com/62

 

TAG •
?

List of Articles
번호 제목 글쓴이 날짜 조회 수
9 Tomcat7 성능 튜닝 방법 JAESOO 2018.07.26 300
» Tomcat7 Tuning JAESOO 2018.07.26 126
7 Tomcat JVM heap memory set 및 size JAESOO 2016.03.22 292
6 Java 실행 옵션 정리 JAESOO 2016.03.22 390
5 메모리 영역 (code, data, stack, heap) JAESOO 2016.03.22 326
4 [JAVA] 개발환경설정 - 표준프레임워크 JAESOO 2016.01.01 258
3 Tomcat 7.x 와 8.x 간의 default configuration 차이 JAESOO 2016.01.01 865
2 [전자정부 표준프레임워크] 톰캣(Tomcat) 설치하기 JAESOO 2016.01.01 190
1 리눅스 webalizer를 통한 apache log(웹서버 접속 통계) 분석하기 (추천) JAESOO 2014.12.24 537
Board Pagination Prev 1 Next
/ 1

PageViews   Today : 235   Yesterday : 383   Total : 22,258,113  /  Counter Status   Today : 101   Yesterday : 157   Total : 1,824,990
Site Info   Member : 252  /  Total documents : 1,303   New documents : 0  /  Total comments : 26

Edited by JAESOO

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소