ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] GC 튜닝
    CS/개발 언어 (JAVA) 2021. 6. 26. 11:27

    GC 튜닝의 두 가지 목적

    Old 영역으로 넘어가는 객체의 수 최소화 하기

    • G1 GC를 제외한 Oracle JVM에서 지원하는 모든 GC는 Generational GC이다.
      • Eden 영역에서 객체가 처음 만들어지고, Survivor 영역을 오가다가, 끝까지 남아 있는 객체는 Old 영역으로 이동한다.
    • Old 영역의 GC는 Young 영역의 GC에 비하여 상대적으로 시간이 오래 소요되기 때문에 Old 영역으로 넘어가는 객체의 수를 줄이면 Full GC가 발생하는 빈도를 줄일 수 있다.
    • Young 영역의 크기를 잘 조절함으로써 효과를 볼 수 있다.

     

    Full GC 시간 줄이기

    • Full GC 실행에 시간이 오래 소요되면(1초 이상) 연관된 여러 부분에서 타임아웃이 발생 할 수 있다.
      • Old 영역의 크기를 줄이면
        • OutOfMemoryError가 발생하거나 Full GC 횟수가 늘어난다.
      • Old 영역의 크기를 늘리면
        • Full GC 횟수는 줄어들지만 실행 시간이 늘어난다.
    • Old 영역의 크기를 잘 조절함으로써 효과를 볼 수 있다.

     

    GC의 성능을 결정하는 옵션

    구분 옵션 설명
    힙(heap) 영역의 크기 -Xms JVM 시작 시 힙 영역 크기
    -Xmx 최대 힙 영역 크기
    New 영역의 크기 -XX:NewRatio New 영역과 Old 영역의 비율
    -XX:NewSize New 영역의 크기
    -XX:SurvivorRatio Eden 영역과 Survivor 영역의 비율

     

    GC 튜닝의 절차

    1. GC 상황 모니터링

    2. 모니터링 결과 분석 후 GC 튜닝 여부 결정

    • GC 수행 시간이 1~3초, 심지어 10초가 넘는 상황이라면 GC 튜닝을 진행해야 한다.
    • GC가 수행되는 시간을 확인했을 때 다음의 조건에 부합되면 GC 튜닝이 필요 없다.
      • Minor GC의 처리 시간이 빠르다. (50ms 내외)
      • Minor GC의 주기가 빈번하지 않다. (10초 내외)
      • Full GC의 처리 시간이 빠르다. (보통 1초 내외)
      • Full GC의 주기가 빈번하지 않다. (10분에 1회)

    3. GC 방식/메모리 크기 결정

    • GC 튜닝을 진행하기로 결정했다면 GC 방식을 선정하고 메모리의 크기를 결정한다. 이 때 서버가 여러 대이면 여러 대의 서버에 GC 옵션을 서로 다르게 지정해서 GC 옵션에 따를 차이를 확인하는 것이 중요하다.

    4. 결과 분석

    • GC 옵션을 지정하고 적어도 24시간 이상 데이터를 수집한 후에 분석을 진행한다.

    5. 결과가 만족스러울 경우 전체 서버에 반영 및 종료

     

     

    https://d2.naver.com/helloworld/37111

     

    댓글

Designed by Tistory.