1. 미들웨어이야기/01. JVM

jmap 명령어를 이용항 heap dump 파일 생성하기

알 수 없는 사용자 2014. 12. 2. 19:44

JVM의 Heap 메모리 정보 확인 및 Heap dump를 생성하는 명령어

Unix/Linux의 경우 kill -3 <PID> 명령어를 이용하여 JVM의 Heap dump 생성이 가능하지만 Windows의 경우 서비스로 기동되어 있을 경우 command console이 없어 thread dump 및 Heap dump 생성이 어려움

이럴 경우 jmap 명령어를 활용하여 Heap dump를 생성할 수 있다.


- 필요한 환경 

  1. UNIX / Linux / Windows : JAVA 6 이상


- 명령어 위치 ( JAVA_HOME은 JDK 설치 폴더를 의미함)

  $JAVA_HOME/bin/jmap.exe


- 명령어 사용법

  > jps -v 

    ... JVM의 PID를 확인 ...

heapdump 파일 생성

 > jmap -dump:format=b,file=<파일명> <PID>

실시간 heap 메모리 사용 정보 확인

  > jmap -heap <PID>


  예시)

  > jps -v 

    4360 jar -XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx512m -XX:NewSize=128m

  > jmap -dump:format=b,file=heapdump.hprof 4360

     ..

  >jmap -heap 4360

Attaching to process ID 4360, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 24.51-b03

using thread-local object allocation.

Parallel GC with 4 thread(s)

Heap Configuration:

  MinHeapFreeRatio = 40

  MaxHeapFreeRatio = 70

  MaxHeapSize      = 536870912 (512.0MB)

  NewSize          = 134217728 (128.0MB)

  MaxNewSize       = 134217728 (128.0MB)

  OldSize          = 5439488 (5.1875MB)

  NewRatio         = 2

  SurvivorRatio    = 8

  PermSize         = 21757952 (20.75MB)

  MaxPermSize      = 85983232 (82.0MB)

  G1HeapRegionSize = 0 (0.0MB)

Heap Usage:

PS Young Generation

Eden Space:

  capacity = 108003328 (103.0MB)

  used     = 48275768 (46.03936004638672MB)

  free     = 59727560 (56.96063995361328MB)

  44.69840781202594% used

From Space:

  capacity = 13107200 (12.5MB)

  used     = 13084416 (12.478271484375MB)

  free     = 22784 (0.021728515625MB)

  99.826171875% used

To Space:

  capacity = 13107200 (12.5MB)

  used     = 0 (0.0MB)

  free     = 13107200 (12.5MB)

  0.0% used

PS Old Generation

  capacity = 402653184 (384.0MB)

  used     = 4650336 (4.434906005859375MB)

  free     = 398002848 (379.5650939941406MB)

  1.154923439025879% used

PS Perm Generation

  capacity = 25690112 (24.5MB)

  used     = 25371360 (24.196014404296875MB)

  free     = 318752 (0.303985595703125MB)

  98.75924246651786% used

13893 interned Strings occupying 1218656 bytes.


by 이환호

정보 출처 : http://docs.oracle.com/javase/6/docs/technotes/tools/index.html#basic