앞선 케이스에서는 튜닝 포인트가 없다. 또한 GC 튜닝은 권장되지 않는 작업이다.

하지만 극단적인 케이스에서는, GC로 인한 서비스 순단을 최소화 할 수 있다.

 


- 튜닝이 필요한 케이스?

 

GC 시간 및 주기를 파악해보고, 정상여부 확인

더보기
  • Minor GC의 처리시간이빠르다 (50ms내외).
  • Minor GC 주기가빈번하지않다 (10초내외).
  • Full GC의처리시간이빠르다 (보통1초이내).
  • Full GC 주기가빈번하지않다 (10분에 1회 )

- 튜닝 대상

 

1. Old 영역으로 넘어가는 객체 최소화 

 

Full GC는 Minor GC에 비해 5~10배 이상 오래걸린다.

그래서 Old 영역에서의 GC보다는, New 영역안에서 이루어지는 GC만으로 메모리 관리하는 것이 가장 좋다.

 

2. Full GC 시간 단축

 

GC시에는 stop-the-world 로 인해 프로세스가 멈추므로 , GC 시간을 최소화 하는것이 좋다

특히 Full GC는 시간이 오래걸리기때문에, 연계 프로세스에서 타임아웃이 걸릴수도 있다.

Old 영역의 크기를 잘 조절하여 GC 시간을 관리하여야 한다.

 

 

Old 영역을 줄인다

=> Full GC 시간은 줄어드나, 횟수가 증가함. 남은 Old 영역보다 많은 객체가 들어올 경우 OOM 발생

 

Old 영역을 늘린다

=> Full GC 횟수는 줄어드나, 시간이 증가함

 

- 튜닝 작업

 

※ 각 시스템, 서버, 프로그램 마다 변수가 다양하기 때문에 정해진 값이나, 권고 값은 없다.

   설정값 변경후에, 모니터링을 하며 ( 최소 24시간 ) 맞는 값을 찾아가야한다.

 

1. GC 방식 결정

 

  • Serial GC - 적은 메모리와 CPU 코어수가 작을 때 유리
  • Parallel GC - 메모리와 코어수가 많을때 유리. Serial과 다르게 다중 스레드 처리
  • Concurrent Mark & Sweep GC(이하 CMS) - 응답속도가 매우 빠르나, 메모리와 코어를 가장 많이 잡아먹는다.
  • G1(Garbage First) GC - Young / Old 에 개념이 없고, 객체별로 객체 할당 및 GC가 이루어짐. JDK 7 버전부터 적용

자세한 내용은 ( d2.naver.com/helloworld/1329 ) 참조

 

2. 메모리 설정

 

먼저, 힙 메모리의 크기를 정해준다.

 

더보기

-Xms : 힙메모리 초기 할당값

-Xmx : 힙메모리 최대 값

 

다음으로 할당된 메모리중에서 , New/Old 영역의 비율을 결정해준다.

 

더보기

-XX:NewRatio : New / Old 영역 비율 지정

ex) Ratio = 4 / New : Old = 1:4

 

3. 설정값 적용 후, 모니터링하며 값들을 수정한다.

 

#참조

d2.naver.com/helloworld/37111

'서버운영 > 자바 GC ( Garbage Collection )' 카테고리의 다른 글

GC분석 - GUI를 통한 gc 추이분석  (0) 2021.04.05
GC 분석 - gc 케이스 분석  (0) 2021.04.05
GC 관리  (0) 2021.04.04
GC ( Garbage Collection )  (0) 2021.04.04

+ Recent posts