jvm과 톰캣 튜닝
TRANSCRIPT
CH09. JVM과 톰캣 튜닝아꿈사 - 최문규
1. JVM튜닝
• JVM튜닝이라 쓰고 GC튜닝이라 읽는다.
• JVM이 작동하는데 있어, 메모리 구조와 GC(Garbage Collection)은 성능에 밀접한 관계
1.1 GC란 무엇인가?
• 사용하지 않는 메모리를 자동으로 거둬들이는 기능
• stop-the-world
• 클래스 인스턴스는 사용자 코드에 의해 명시적으로 생성되고 가비지 컬렉션에 의해 자동으로 파괴된다.
1.2 GC동작 방법
• JVM메모리 영역
메모리 구조• new/young
객체가 생성되지 마자 저장되는곳. 시간에 지남에 따라 old영역으로 이동
• oldnew/young영역에서 저장되었던 객체 중, 오래된 객체가 이동되어 저장
• permclass, method등의 코드가 저장되는 영역
GC알고리즘즘
• Minor GC
• Copy & Scavenge : eden, survivor영역
• Full GC
• Mark & Compact : old영역
다양한 GC알고리즘
• Default Collector
• Parallel GC for young generation
• Concurrent GC for old generation
• Incremental GC
Parallel GC
• JDK1.4부터는 Minor GC를 동시에 여러개의 스레드를 이요해 사용가능
• 4 cpu, 256M이상에서 성능 발휘?
• Low-pause(stop-the-world 최소화)Throughput(ASAP) 두 가지 방식을 사용
Concurrent GC• Full GC의 단점(stop-the-world)를 보완하기 위해
• Initial Mark : 활성화 객체 미리 찾기
• Concurrent Mark : 참조가 끊긴 객체 확인
• Concurrent Sweep : 정리 정리
Incremental GC
• Full GC에 의해서 발생하는 stop-the-world pause를 줄이자
• Minor GC가 일어날 때마다, old영역을 조금씩 GC해서자결과적으로 Full GC를 최소한으로 일어나게 만들자
GC로그 수집과 분석 방법• java -verbosegc
• java -XX:+PrintGCDetails
GC관련 파라미터• 전체 힙 크기 조정
-Xms1024M -Xmx1024M
• perm크기 조정 -XX:MaxPermSize
• new영역과 old영역의 크기 조정-XX:NewSize
• survivor영역 비율 조정 -XX:SurvivorRatio http://www.oracle.com/technetwork/java/javase/community/vmoptions-jsp-140102.html
• ref : http://www.oracle.com/technetwork/java/javase/community/vmoptions-jsp-140102.html
GC관련 파라미터• -server
• 어플리케이션 서버에 적합한 compiler최적화, 메모리구조
• new 영역 > old영역
• -client
• 클라이언트 어플리케이션에 적합한 compiler최적화, 메모리구조
• new영역 < old영역
JVM GC튜닝
1. 어플리케이션의 종류와 튜닝 목표 값 설정
2. 힙 크기와 perm크기 설정
3. 테스트와 로그분석
4. perm크기 조정
5. GC 수행시간 분석
6. 파라미터 변경
2. tomcat 튜닝
• 시나리오 : HTTP/JSON, REST형태로 API서버 L4스위치
server.xml튜닝
• Listener설정
• tomcat이 기동할 때, root로 실행금지
• 설정파일, 로그파일들이 루트권한으로 바뀌어서일반 계정으로 재 실행시, 권한 문제 발생
Connector설정
• acceptCount=“10”
• 큐의 길이를 정의
• 큐의 길이를 적당히 조절해, 요청을 처리 하지 못하는걸 빨리 알려주는 예외처리시
• enableLoopups=“false”
• http요청에 대한 IP를 조회하는 명령을 비활성
Connector설정
• maxConnection=“8192”
• tomcat가 사용가능한 FD(file descriptior) 수
• TIME_WAIT로 인한, socket close지연
• maxKeepAliveRequest=“1”
• keep alive연결 시, 최대 유지연결 갯수 지정
Connector설정
• maxThread=“100”
• tomcat내의 스레드 수를 설정한다.
2.5메모리 옵션
• 메모리 튜닝은 중요하다
• 힙크기는 최소 값, 최대 값을 같은 크기로 지정
• 힙 덤프옵션사용으로, out of memory발생시 해당 위치를 찾기 용이
• parallel GC + Concurrent GC
• GC로그 사용