about garbage collection

21
About Garbage Collection gmind7 Rendered : October 25, 2012

Upload: -

Post on 13-Jan-2015

413 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: About garbage collection

About Garbage Collection

gmind7 Rendered : October 25, 2012

Page 2: About garbage collection

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 개발자가 되기 위한 필수 조건이라는 데에는 별다른 이견이 없을 것입니다

Page 3: About garbage collection

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의 횟수에 포함

Page 4: About garbage collection

How Garbage Collection works in Java ㅁ JVM Generational GC

Minor Collections (Young)

Major Collections (Old, Perm) – Full GC 생긴 지 얼마 안된 객체는 대부분이 얼마 지나지 않아 필요 없으므로 자주 GC를 수행 하여 수행시간을 단축 함

오랫동안 살아남은 객체는 그 수가 적고 자주 사용 했던 객체로 GC 수행이 잦지 않지만 수행시간이 길어 이를 해결하기 위해 GC Algorithm을 적용하여 최적화 함

4

Page 5: About garbage collection

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-조각모음 / 특정영역복사 추후해제

Page 6: About garbage collection

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

Page 7: About garbage collection

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 코어수가 적을 때만 사용

Page 8: About garbage collection

How Garbage Collection works in Java

8

Parallel GC (-XX:+UseParallelGC) ㅁ

single multi

Parallel Old GC (-XX:+UseParallelOldGC) ㅁ

Mark

Sumary

Compact Sliding

앞선 GC에서 살아 있는 객체를 식별

객체 삭제

삭제할 대상 객체를 Mark

Page 9: About garbage collection

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 이 더 길게 진행 되어 질 수 있음

Page 10: About garbage collection

How Garbage Collection works in Java

10

G1 GC (JDK7 정식지원) ㅁ

말도 많고 탈도 많은 CMS GC

대체하기 위해 만들어짐

Page 11: About garbage collection

How Garbage Collection works in Java

11

JVM Command line Options ㅁ

Page 12: About garbage collection

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)

Page 13: About garbage collection

How Garbage Collection Monitoring

13

ㅁ 얼마 전 대화서비스에서의 PermGen Out of memory

Page 14: About garbage collection

How Garbage Collection Monitoring

14

ㅁ GUI GC Tool Demo

excellect. VIsualVM & VisualGC & HPJMeter

together. Eclipse MAT(Memory Analyzer Tool)

Page 15: About garbage collection

How Garbage Collection Tunning

15

ㅁ GC Tunning을 하는 이유가 무엇인지 근본적인 원인 은 ?

무분별한 객체 생성

과도한 임시 메모리 사용

Page 16: About garbage collection

How Garbage Collection Tunning

16

ㅁ GC Tunning을 하는 Target은 어디 ?

• old 영역으로 넘어가는 객체 수 최소화 히기 (손쉬운 방법 : New 영역의 크기를 조절)

• Full GC 시간 줄이기 (요건 뒷에서…..계속)

ㅁ GC 성능을 결정하는 옵션은 ?

Page 17: About garbage collection

How Garbage Collection Tunning

17

ㅁ GC Tunning

• GC 상황 모니터링 GC 수행시간 1초~3초, 그 이상 Batch도 아닌데… 서비스 상황별로 GC 수행 기준 시간 목표와 발생빈도를 정해야 하며 그 기준은 서비스 별로 틀릴 수 있다.

Page 18: About garbage collection

How Garbage Collection Tunning

18

ㅁ GC를 이해한 개발하기 (profiler, mat를 이용한 패턴 체크)

무분별한 객체 생성 삭제 수정 - aop, interceptor... 개발 로직….thread

무분별한 루프와 변수 사용, 대량 String Parsing 으로 인한 임시 메모리 사용 억제

Page 19: About garbage collection

How Garbage Collection Tunning

19

ㅁ GC Case By Case 결과 분석 (서버별로 하루 정도 gc log를 쌓기)

이번 case에서 X번이 가장 최적화되었다고 해서 다른 서비스에서도 최적화 될 수 는 없다.

Page 20: About garbage collection

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

Page 21: About garbage collection

Garbage Collection

gmind7