Upload
-
View
413
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
About Garbage Collection
gmind7 Rendered : October 25, 2012
Garbage Collection(GC)
2
ㅁ GC 란? (쓰레기 정리) program(객체)이 점유하여 쓰고 있는 memory 공간 중 더 이상 쓰지 않는 memory 영역을 Garbage라고 하며 이를 정리하는 과정을 Garbage Collection 이라 함.
ㅁ stop-the-world
GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 행위
stop start start
GC
지극히 개인적이고 주관적인 판단 기준을 먼저 밝힌다면, 가비지 컬렉션(Garbage Collection, 이하 GC)에 대해 잘 알고 있을수록 실력이 좋은 Java 개발자라고 생각합니다. GC 과정에 관심을 가질 정도라면 규모가 일정 이상인 애플리케이션을 제작해 본 경험이 있을 것입니다. 또, 어떤 GC 알고리즘을 선택할 것인지 고민할 정도면 스스로 제작한 애플리케이션의 특징을 정확히 이해하고 있다고 볼 수 있습니다. 이러한 판단 기준이 보편적이지는 않지만, GC에 대한 이해는 훌륭한 Java 개발자가 되기 위한 필수 조건이라는 데에는 별다른 이견이 없을 것입니다
How Garbage Collection works in Java
3
ㅁ JVM memory Area
Young : 새롭게 생성한 객체의 대부분이 여기에 위치한다. 이 영역에서 객체가 사라질때 Minor GC가 발생
Old : Young 영역에서 살아남은 객체가 여기로 복사. 이 영역에서 객체가 사라질 때 Major GC(혹은 Full GC)가 발생
Prem : 객체나 억류(intern)된 문자열 정보를 저장하는 곳. Static 변수, 여기서 GC가 발생해도 Major GC의 횟수에 포함
How Garbage Collection works in Java ㅁ JVM Generational GC
Minor Collections (Young)
Major Collections (Old, Perm) – Full GC 생긴 지 얼마 안된 객체는 대부분이 얼마 지나지 않아 필요 없으므로 자주 GC를 수행 하여 수행시간을 단축 함
오랫동안 살아남은 객체는 그 수가 적고 자주 사용 했던 객체로 GC 수행이 잦지 않지만 수행시간이 길어 이를 해결하기 위해 GC Algorithm을 적용하여 최적화 함
4
How Garbage Collection works in Java
5
ㅁ JVM GC Algorithm
Serial/Paraller : 모든 Garbage를 차례대로 혼자 치우느냐 / 같이 치우느냐….
Stop-the-World / Concurrent
Compacting / Non-compacting / Copying GC 수행시 Program을 Stop 시키느냐 / GC와 Program을 같이 실행 하느냐
GC 수행시 남은 메모리공간조각모음 / NON-조각모음 / 특정영역복사 추후해제
How Garbage Collection works in Java
6
ㅁ Young Generation GC Cycle
Eden
S0 S1
Allocation(할당)
Eden
S0 S1
Eden
S0 S1
clear
clear
Eden
S0 S1
Eden
S0 S1
clear
clear Old Generation
Promotion(승진)
Stop-the-world, copying 메모리 할당 방법 추가 참조 : bump-the-pointer, TLABs
How Garbage Collection works in Java
7
ㅁ JVM Garbage Collector (old Generation GC)
Serial GC (-XX:+UseSerialGC)
Mark
Sweep
Compact Sliding
ㅁ Refer to the Young ㅁ
적은 메모리와 Cpu 코어수가 적을 때만 사용
How Garbage Collection works in Java
8
Parallel GC (-XX:+UseParallelGC) ㅁ
single multi
Parallel Old GC (-XX:+UseParallelOldGC) ㅁ
Mark
Sumary
Compact Sliding
앞선 GC에서 살아 있는 객체를 식별
객체 삭제
삭제할 대상 객체를 Mark
How Garbage Collection works in Java
9
CMS GC (-XX:+UseConcMarkSweepGC) ㅁ
클래스 로더에서 가장 가까운 객체 중 살아 있는 객체 찾기, 멈추는 시간은 매우 짧다
방금 살아있다고 확인한 객체에서 참조하고 있는 객체들을 따라가면서 확인, 다른 스레드와 동시 진행
Concurrent Mark 단계에서 새로 추가되거나 참조가 끊긴 객체를 확인
쓰레기를 정리하는 작업, 다른 스레드와 동시 진행
장점 : stop-the-world 시간이 매우 짧다. 모든 애플리케이션의 응답 속도가 매우 중요할 때 CMS GC를
사용하며, Low Latency GC라고도 부른다
단점 : 다른 GC 방식보다 메모리와 CPU를 더 많이 사용한다. Compaction 단계가 기본적으로 제공되지 않아
조각난 메모리 공간 때문에 Compaction 작업을 실행하면 stop-the-world 이 더 길게 진행 되어 질 수 있음
How Garbage Collection works in Java
10
G1 GC (JDK7 정식지원) ㅁ
말도 많고 탈도 많은 CMS GC
대체하기 위해 만들어짐
How Garbage Collection works in Java
11
JVM Command line Options ㅁ
How Garbage Collection Monitoring
12
ㅁ GC Monitoring
CUI GC 모니터링 방법에는 'jstat'이라는 CUI 애플리케이션을 이용하는 방법과 JVM을 가동할 때 '-verbosegc'라는 JVM 옵션을 이용
GUI GC 모니터링 방법은 별도의 GUI 애플리케이션을 이용한다. 대표적인 GUI 애플리케이션 세 가지를 꼽으라면 'jconsole', ‘VisualVM', 'VisualGC'를 들 수 있음
CUI GC GUI GC
excellect. VIsualVM & VisualGC & HPJMeter together. Eclipse MAT(Memory Analyzer Tool)
How Garbage Collection Monitoring
13
ㅁ 얼마 전 대화서비스에서의 PermGen Out of memory
How Garbage Collection Monitoring
14
ㅁ GUI GC Tool Demo
excellect. VIsualVM & VisualGC & HPJMeter
together. Eclipse MAT(Memory Analyzer Tool)
How Garbage Collection Tunning
15
ㅁ GC Tunning을 하는 이유가 무엇인지 근본적인 원인 은 ?
무분별한 객체 생성
과도한 임시 메모리 사용
How Garbage Collection Tunning
16
ㅁ GC Tunning을 하는 Target은 어디 ?
• old 영역으로 넘어가는 객체 수 최소화 히기 (손쉬운 방법 : New 영역의 크기를 조절)
• Full GC 시간 줄이기 (요건 뒷에서…..계속)
ㅁ GC 성능을 결정하는 옵션은 ?
How Garbage Collection Tunning
17
ㅁ GC Tunning
• GC 상황 모니터링 GC 수행시간 1초~3초, 그 이상 Batch도 아닌데… 서비스 상황별로 GC 수행 기준 시간 목표와 발생빈도를 정해야 하며 그 기준은 서비스 별로 틀릴 수 있다.
How Garbage Collection Tunning
18
ㅁ GC를 이해한 개발하기 (profiler, mat를 이용한 패턴 체크)
무분별한 객체 생성 삭제 수정 - aop, interceptor... 개발 로직….thread
무분별한 루프와 변수 사용, 대량 String Parsing 으로 인한 임시 메모리 사용 억제
How Garbage Collection Tunning
19
ㅁ GC Case By Case 결과 분석 (서버별로 하루 정도 gc log를 쌓기)
이번 case에서 X번이 가장 최적화되었다고 해서 다른 서비스에서도 최적화 될 수 는 없다.
Garbage Collection Reference http://helloworld.naver.com/helloworld/helloworld/1329 http://helloworld.naver.com/helloworld/helloworld/6043 http://helloworld.naver.com/helloworld/helloworld/1329 http://ryudaewan.springnote.com/pages/145343 http://knight76.tistory.com/entry/JAXB-%EC%9E%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0 http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
Garbage Collection
gmind7