* Sun Microsystyems의 자바 HotSpot VM은 힙을 세 개의 영역으로 나누고 있다.
힙의 세 영역은 다음과 같다:
1) Permanent space: JVM 클래스와 메소드 개체를 위해 쓰인다.
2) Old object space: 만들어진지 좀 된 개체들을 위해 쓰인다.
3) New(young) object space: 새로 생성된 개체들을 위해 쓰인다.
* Heap layout 할당에 영향을 주는 스위치들
명령행 스위치 설명
-------------|-------
-Xms=[n] 최소 heap size
-Xmx=[n] 최대 heap size
-XX:PermSize=[n] 최소 perm size
-XX:MaxPermSize=[n] 최대 perm size
-XX:NewSize=[n] 최소 new size
-XX:MaxNewSize=[n] 최대 new size
-XX:SurvivorRatio=[n] New/survivor 영역 비율
-XX:newratio=[n] Old/new 영역 비율. HotSpot 클라이언트 VM은 8, HotSpot 서버 VM은 2.
-XX:TargetSurvivorRatio=[n] GC동안 비울 생존자 수용 가능량 퍼센티지 (capacity percentage.) 초기값은 50%
* New Generation 메모리 할당 공식
Eden = NewSize - ((NewSize/(SurvivorRatio + 2)) * 2)
From space = (NewSize - Eden)/2
To space = (NewSize - Eden)/2
* Old Generation 메모리 할당 공식
Old = Xmx - MaxNewSize
* GC한 상태의 Heap메모리 정보출력
jdk1.4에서 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC
* 정적페이지가 많을 때
-Xms418m -Xmx418m
-XX:PermSize=1024m
-XX:MaxPermSize=1024m
-XX:NewSize=290m
-XX:MaxNewSize=290m
-XX:SurvivorRatio=3
* 동적인 페이지가 많을 때
-Xms1024m -Xmx1024m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:NewSize=800m
-XX:MaxNewSize=800m
-XX:SurvivorRatio=4
-Xms384m -Xmx384m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=3
set CATALINA_OPTS=-Xms384m -Xmx384m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=3
---------------------------------------------------------------------------
kol:/ero/bin>cat tomcat_startup.sh
#!/usr/bin/ksh
. /ero/bin/ero.env
export CATALINA_OPTS="-server -Xms4096M -Xmx4096M -XX:PermSize=64M -XX:MaxPermSize=64M -Xnoclassgc -XX:NewSize=1024M -XX:MaxNewSize=1024M -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=50 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC"
# -Xms4096M : 최소 heap 크기
# -Xmx4096M : 최대 heap 크기
#
# -XX:PermSize=64M : 코드영역(class로딩장소) 최소값
# -XX:MaxPermSize=64M : .. 최대값
# -Xnoclassgc : .. 에 대해 GC를 수행하지 않음
#
# -XX:NewSize=1024M : new 영역 최소 1G 확보
# -XX:MaxNewSize=1024M : .. 최대 ..
#
# -XX:+UseParNewGC : 멈춤을 최소로하는 new영역 GC 방법사용
# -XX:ParallelGCThreads=4 : GC를 동시 수행하는 thread갯수
#
# -XX:+UseConcMarkSweepGC : 멈춤을 최소로하는 old 영역 GC 방법사용
# -XX:CMSInitiatingOccupancyFraction=50 : old영역이 50% 이상 사용되면 GC 수행