사용자 도구

사이트 도구


java:memory

문서의 이전 판입니다!


Java Memory Analysis

Heap Dump on OutOfMemoryError

  • Java 시작시에 다음과 같은 옵션을 주면, OutOfMemoryError로 인한 JVM에 종료시 Heap Dump를 생성해준다.
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=jvm.hprof
  • -XX:HeapDumpPath를 생략하면 JVM 시작 디렉토리에 java_pid<pid>.hprof형태로 생성된다.
  • -XX:+PrintClassHistogramAfterFullGC, -XX:+PrintClassHistogramBeforeFullGC 등의 옵션으로 Full GC 전/후의 메모리 상태를 간략히 덤프할 수 있다. Java Garbage Collection 참조.

jmap

  • 힙 덤프(Heap Dump)를 뜬다.
  • WebServer - Heap Dump를 뜨는 작업은 매우 큰 용량과 시간을 필요로 하기 때문에 WebServer - WAS 구조일 때 WebServer를 내려서 WAS에 요청이 오지 않게 만든 뒤에 작업해야 한다.
  • live 옵션을 주면 live 객체만 덤프를 받는다. 이 옵션이 없으면 Heap 상의 모든 객체를 덤프 받는다.
  • 바이너리 파일로 덤프 받기
    # jmap 사용
    jps # Java PID 확인
    jmap -dump:live,format=b,file=파일명.bin <PID>
     
    # jmap 잘 안될때 force. live 허용 안됨.
    jmap -F -dump:format=b,file=파일명.bin <PID>
     
    # gcore 사용
    gcore -o 파일명.core <PID> # 파일명.core.<PID> 파일생성
    jmap -dump:format=b,file=파일명.bin /usr/java/defaults/bin/java 파일명.core
  • 한번에 확인해보기
    jps -v | grep "원하는검색어" | awk '{print $1}' | xargs jmap -dump:live,format=b,file=jdump.hprof
  • jstatd를 띄웠을 경우, <PID> 대신 <PID>@호스트네임:포트 형태로 호출해도 된다.
  • JVM 현재 메모리 상태 Foot print. 현재 메모리상의 클래스의 객체 갯수와 용량표시
    jmap -histo:live <PID>

jhat

  • 힙 덤프를 분석한다.
  • jhap -J-mx2048m 파일명.bin 실행후 http://localhost:7000/ 에서 살펴볼 수 있다.
    • 힘 덤프 파일의 크기가 클 경우 OOM 에러가 발생할 수 있으므로 -J-mx2048m 지정
  • 메모리를 너무 많이 먹어서 실제로 제대로 실행하기 힘듬.

MAT

용어

  • Shallow heap : 하나의 객체가 소비하는 메모리 용량. 객체 레퍼런스는 하나당 아키텍처에 따라 32bits(혹은 62bits)를 차지한다.
  • Ratained heap : 해당 객체의 모든 인스턴스를 GC했을 때 확보할 수 있는 메모리 총량.

IBM HeapAnalyzer

  • 힙덤프 파일의 크기가 크기 때문에 실행시 -Xmx2048m 형태로 메모리 옵션을 줘야 한다.

HPJmeter

  • GC Log, Heapdump 등을 분석할 수 있다.

jstat

현재 JVM의 메모리 상태를 확인해 볼 수 있다.

옵션명 내용
class 클래스 로더의 동작에 관한 통계 데이터
compiler HotSpot Just-in-Time 컴파일러의 동작에 관한 통계 데이터
gc GC된 heap의 동작에 관한 통계 데이터
gccapactiy 세대마다의 용량과 대응하는 영역에 관한 통계 데이터
gccause GC 통계 데이터의 개요(-gcutil 와 같다)와 직전 및 현재 (적용 가능한 경우)의 GC이벤트의 원인
gcnew New 세대의 동작에 관한 통계 데이터
gcnewcapacity New 세대의 사이즈와 대응하는 영역에 관한 통계 데이터
gcold Old 세대 및 Permanent 세대의 동작에 관한 통계 데이터
gcoldcapacity Old 세대의 사이즈에 관한 통계 데이터
gcpermcapacity Permanent 세대의 사이즈에 관한 통계 데이터
gcutil GC 통계 데이터의 개요
printcompilation HotSpot 컴파일 방법의 통계 데이터

참조

java/memory.1436920939.txt.gz · 마지막으로 수정됨: 2015/07/15 09:42 저자 kwon37xi