문서의 이전 판입니다!
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