ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] Garbage Collection 모니터링
    CS/개발 언어 (JAVA) 2021. 6. 21. 23:36

    GC 모니터링

    • JVM이 어떻게 GC를 수행하고 있는지 알아내는 과정
    • Young 영역에 있는 객체를 Old 영역에 언제 얼마나 이동했는지, stop-the-world가 언제 얼마나 일어났는지에 대한 정보를 알 수 있음

     

    GC 모니터링 방법

    jstat

    VMID (Virtual Machine ID)

    • 동작하고 있는 VM을 가리키는 ID
    • jstat을 통해서 모니터링을 하기 위해서는 vmid 정보를 argument로 전달 필요
    • VMID를 확인하기 위해서는 아래와 같이 jps 명령어를 통해서 확인 가능
    $ jsp
    2981 auth-api.jar

    GC 관련 jstat 옵션

    옵션 기능
    gcutil 각 힙 영역에 대한 사용 정도를 백분율로 보여준다. 아울러 총 GC 수행 횟수와 누적 GC 시간을 알 수 있다.
    gc 각 힙(heap) 영역의 현재 크기와 현재 사용량(Eden 영역, Survivor 영역, Old 영역등), 총 GC 수행 횟수, 누적 GC 소요 시간을 보여준다.
    gccapacity 각 힙 영역의 최소 크기(ms), 최대 크기(mx), 현재 크기, 각 영역별 GC 수행 횟수를 알 수 있는 정보를 보여준다. 단, 현재 사용량과 구적 GC 소요 시간은 알 수 없다.

    jstat의 옵션에 따른 컬럼 정보

    컬럼 설명 jstat 옵션
    S0C Survivor 0 영역의 현재 크기를 KB 단위로 표시 -gc -gccapacity -gcnew -gcnewcapacity
    S1C Survivor 1 영역의 현재 크기를 KB 단위로 표시 -gc -gccapacity -gcnew -gcnewcapacity
    S0U Survivor 0 영역의 현재 사용량을 KB 단위로 표시 -gc -gcnew
    S1U Survivor 1 영역의 현재 사용량을 KB 단위로 표시 -gc -gcnew
    EC Eden 영역의 현재 크기를 KB 단위로 표시 -gc -gccapacity -gcnew -gcnewcapacity
    EU Eden 영역의 현재 사용량을KB 단위로 표시 -gc -gcnew
    OC Old 영역의 현재 크기를 KB 단위로 표시 -gc -gccapacity -gcold -gcoldcapacity
    OU Old 영역의 현재 사용량을KB 단위로 표시 -gc -gcold
    PC Permanent영역의 현재 크기를 KB 단위로 표시 -gc -gccapacity -gcold -gcoldcapacity -gcpermcapacity
    PU Permanent영역의 현재 사용량을KB 단위로 표시 -gc -gcold
    YGC Young Generation의 GC 이벤트 발생 횟수 -gc -gccapacity -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcpermcapacity -gcutil -gccause
    YGCT Yong Generation의 GC 수행 누적 시간 -gc -gcnew -gcutil -gccause
    FGC Full GC 이벤트가 발생한 횟수 -gc -gccapacity -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcpermcapacity -gcutil -gccause
    FGCT Full GC 수행 누적 시간 -gc -gcold -gcoldcapacity -gcpermcapacity -gcutil -gccause
    GCT 전체 GC 수행 누적 시간 -gc -gcold -gcoldcapacity -gcpermcapacity -gcutil -gccause

     

    S0 S1 E O P YGC YGCT FGC FGCT GCT  
    0.00 66.44 54.12 10.58 86.63 217 0.928 2 0.067 0.995  
    0.00 66.44 54.12 10.58 86.63 217 0.928 2 0.067 0.995  
    0.00 66.44 54.12 10.58 86.63 217 0.928 2 0.067 0.995  
    • 평균 Minor GC 소요시간
      • YGCT(0.928) / YGC(217) = 0.004 (4ms)
    • 평균 Full GC 소요시간
      • FGCT(0.067) / FGC(2) = 0.033 (33ms)

     

    -verbosegc 옵션

    직관적으로 이해하기 쉬운 출력 결과를 GC가 발생할 때마다 보여주기 때문에 개략적인 GC 정보를 모니터링하기 좋음

    $ java -Xms1024m -verbose:gc -XX:+PrintGCDetails -Xloggc:gc.log -jar auth-api.jar
    [1.968s][info][gc           ] GC(1) Pause Young (Concurrent Start) (Metadata GC Threshold) 330M->22M(1024M) 24.450ms
    • 330M : GC전 Heap 메모리 총 사용량
    • 22M : GC후 Heap 메모리 총 사용량
    • 1024M : 전체 Heap 메모리 크기 (Young Generation + Old Generation)
    • 24.450ms : GC를 위해 Java 애플리케이션 수행을 멈춘 시간

     

    VisualVM

    CPU, Memory, Classes, Threads의 상태를 확인 가능

    Tools - Plugins - Available Plugins - Visual GC 설치 시 각 영역의 사용량과 수행 시간을 확인 가능

     

     

    용어 설명

    • Permanent Area
      • JVM 메모리에서 Method Area를 Permanect Area라고 한다.
    • Full GC
      • Minor GC + Major GC

     

    참조 사이트

    https://mirinae312.github.io/develop/2018/06/04/jvm_memory.html

     

    Java Memory 간단히 살펴보기 - J's log

    Java 애플리케이션을 실행하는 경우, JVM 메모리에는 여러가지 데이터가 로드되고 해제된다. JVM 의 메모리는 어떤객체를 저장하고 어떤 용도로 사용되는지에 따라 여러 영역으로 나뉘어져 있다. J

    mirinae312.github.io

    https://d2.naver.com/helloworld/6043-XX:+PrintGCTimeStamps 

     

    'CS > 개발 언어 (JAVA)' 카테고리의 다른 글

    [JAVA] GC 튜닝  (0) 2021.06.26
    [개발언어] @Controller vs @RestController  (0) 2021.06.04
    [JAVA] Reactive Streams  (0) 2021.05.16
    [JAVA] 자바 가상 머신 (Java Virtual Machine)  (0) 2021.05.12
    [JAVA] JVM Memory  (0) 2021.04.22

    댓글

Designed by Tistory.