JVM 튜닝 2
YGCT/YGC = Minor GC 처리시간
FGCT/FGC = Full GC 처리시간
--> 아래의 기준이면 적당함... 절대치는 아님.
Minor GC의 처리 시간이 빠르다(50ms내외).
Minor GC 주기가 빈번하지 않다(10초 내외).
Full GC의 처리 시간이 빠르다(보통 1초 ~ 2초 이내).
Full GC 주기가 빈번하지 않다(10분에 1회).
Survivor 영역 중 하나는 반드시 비어 있는 상태로 남아 있어야 한다. 만약 두 Survivor 영역에 모두 데이터가 존재하거나, 두 영역 모두 사용량이 0이라면 여러분의 시스템은 정상적인 상황이 아니라고 생각하면 된다.
--> 특정 스레드에서 비즈니스 로직이 blocking 되어 GC에 문제가 발생한다. 해당 로직을 Async 로 리팩토링해야 한다.
--> 아래와 같이 FGC 일때 old 영역이 제대로 비워져야함. Full GC 또한 5/0.509 도 1초로 적당, Minor GC 도 0.01 로 적당.
@Async
요청이 긴 경우
로그 처리
푸시 처리
Timestamp S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
1700.4 71.05 0.00 81.15 99.63 95.42 93.09 1000 15.750 4 0.414 16.164
1701.4 0.00 81.20 32.15 99.72 95.42 93.09 1001 15.764 4 0.414 16.178
1702.4 0.00 81.20 96.06 99.72 95.42 93.09 1001 15.764 4 0.414 16.178
1703.4 0.00 0.00 51.00 6.76 95.42 93.09 1002 15.777 5 0.509 16.286
java-gc-overhead-limit-exceeded 에러 : https://www.baeldung.com/java-gc-overhead-limit-exceeded