문서의 이전 판입니다!
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 참조.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
jmap -histo:live <PID>
jhap -J-mx2048m 파일명.bin
실행후 http://localhost:7000/ 에서 살펴볼 수 있다.-J-mx2048m
지정-Xmx2048m
형태로 메모리 옵션을 줘야 한다.현재 JVM의 메모리 상태를 확인해 볼 수 있다.
jps # PID확인 jstat -gc <PID> 1000 # 1초마다 gc 확인
옵션명 | 내용 |
---|---|
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 컴파일 방법의 통계 데이터 |
서버가 여러대일 경우 특정 서버에 자동 접속하여 해당 서버의 Tomcat 인스턴스를 찾아서 gcutil 실행
ssh myhostname 'bash -s' <<'ENDSSH' jstat -gcutil `jps | grep Bootstrap | awk '{print $1}'` 1s ENDSSH