'Jstat 으로 JVM heap memory 모니터링 하기 [출처] Jstat 으로 JVM heap memory 모니터링 하기|작성자 솔바게'에 해당되는 글 1건

  1. 2012.05.08 Jstat 으로 JVM heap memory 모니터링 하기
01.JAVA/Java2012. 5. 8. 15:01
반응형


1. jstat 수행 방법
   - 우선 모니터링 하고자 하는 프로세스의 ID 를 확인합니다.
      확인하는 방법은 ps -ef | grep java 로 확인을 해도 되고, 프롬프트 상태에서 jps 라고 입력한 뒤 엔터를 치면 해당 JVM에서 수행된 프로세스의 ID를 보여줍니다.
      (jps 사용시에는 PATH에 해당 JDK가 설정되어 있어야 합니다.
 
 

  - 두번째로 jstat 명령을 수행 합니다.

      jstat -gcutil -h20 -t 7251 3000 3000

      -> gcutil : gcutil 에 대해서 수행

      -> -h20 : 20라인마다 header 찍음

      -> -t : time stamp 프린트(JVM 이 스타트 된 이후의 시간)

      -> 7251 : 프로세스 id

      -> 3000 : interval (ms 단위)

      -> 3000 : count
 
 - 수행 결과
 
2. 각각의 항목 설명

  - S0 Survivor 영역 0 의 사용율 (현재의 용량에 대한 퍼센티지)

  - S1 Survivor 영역 1 의 사용율 (현재의 용량에 대한 퍼센티지)

  - Eden 영역의 사용율 (현재의 용량에 대한 퍼센티지)

  - Old 영역의 사용율 (현재의 용량에 대한 퍼센티지)

  - Permanent 영역의 사용율 (현재의 용량에 대한 퍼센티지)

  - YGC Young 세대의 GC 이벤트수

  - YGCT Young 세대의 가베지 콜렉션 시간

  - FGC 풀 GC 이벤트수

  - FGCT 풀 가베지 콜렉션 시간

  - GCT : 가베지 콜렉션총시간
 
3. 샘플
  >jstat -gcutil 21891 250 7
      S0     S1     E      O      P     YGC    YGCT    FGC    FGCT     GCT
     12.44   0.00  27.20   9.49  96.70    78    0.176     5    0.495    0.672
     12.44   0.00  62.16   9.49  96.70    78    0.176     5    0.495    0.672
     12.44   0.00  83.97   9.49  96.70    78    0.176     5    0.495    0.672
      0.00   7.74   0.00   9.51  96.70    79    0.177     5    0.495    0.673
      0.00   7.74  23.37   9.51  96.70    79    0.177     5    0.495    0.673
      0.00   7.74  43.82   9.51  96.70    79    0.177     5    0.495    0.673
      0.00   7.74  58.11   9.51  96.71    79    0.177     5    0.495    0.673

 

    이 예의 출력은, Young 세대의 콜렉션이 3 번째와 4 번째의 샘플간에 행해진 것을 나타내고 있습니다.

    콜렉션에는 0.001 초 걸리고 있어 오브젝트가 Eden 영역 (E)으로부터 Old 영역 (O)에 승격했기 때문에,

    Old 영역의 사용율은 9.49% 에서 9.51% 에 증가하고 있습니다.

    Survivor 영역은, 콜렉션전은 12.44% 가 사용되고 있었습니다만, 콜렉션 후는 7.74% 밖에 사용되고 있지 않습니다.

 

실시간으로 메모리 사용을 좀 확인해야 하는 상황에서는 위와 같이 jstat 로 간단하게 모니터링을 수행하면

현재의 JVM 메모리 사용 상황을 확인이 가능할 것 같습니다.

 

가장 정확한 건 GC 로그를 별도의 파일로 출력하게 해서 분석하는 것이지만, 이럴 경우에는 실시간으로 확인이 힘들기 때문에

위와 같이 사용하는 것도 괜찮은 방법 중의 하나일 것 같습니다.

물론 JVM 에 계속 request 를 보내기 때문에 부하가 있을 듯 하지만, 지금 생각으로는 크게 영향은 미치지 않을 듯 하네요..

영향이 고려되면 interval을 좀 조정하든지 하면 될 듯 합니다.

Posted by 1010