앞선 케이스에서는 튜닝 포인트가 없다. 또한 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. 설정값 적용 후, 모니터링하며 값들을 수정한다.
#참조
'서버운영 > 자바 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 |