참고 : https://programmer.ink/think/jvm-series-jvm-tuning-jps-jstat-jmap-jhat-jstack-jinfo.html
1. JMAP
힙 메모리 보기
$> jmap -heap [pid]
덤프 생성
$> jmap -dump:live,file=[생성할 파일경로및파일명] [pid]
생성된 덤프를 바로 웹으로 보고 싶다면
$> jhat -J-Xmx[메모리사이즈:덤프크기보다 크게] -port [사용할포트] [생성한 파일경로및파일명]
-> ex> jhat -J-Xmx2g -port 10000 /tmp/dump.bin
자바 jmap으로 heap 메모리 분석(jmap -heap pid) 수행시 오류 발생 할때
Heap Usage:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.tools.jmap.JMap.runTool(JMap.java:201)
at sun.tools.jmap.JMap.main(JMap.java:130)
Caused by: java.lang.RuntimeException: unknown CollectedHeap type : class sun.jvm.hotspot.gc_interface.CollectedHeap
at sun.jvm.hotspot.tools.HeapSummary.run(HeapSummary.java:157)
at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260)
at sun.jvm.hotspot.tools.Tool.start(Tool.java:223)
at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
at sun.jvm.hotspot.tools.HeapSummary.main(HeapSummary.java:50)
... 6 more
아래와 같이 설치가 가능함(아래는 java 1.8임)
yum --enablerepo='*-debug*' install java-1.8.0-openjdk-debuginfo.x86_64
위 명령 수행시 오류 날때는 버전이 맞지 않아서 임
아래에서 버전 확인 뒤
http://debuginfo.centos.org/7/x86_64/
wget 명령을 통해 위의 다운로드 주소 붙여넣고
rpm -ivh 파일명 을 통해 설치
2. 메모리 튜닝
https://nozaki.me/roller/kyle/entry/memory-usage-tuning-of-java8
java 다음에 옵션 추가
예) java -Xms256m -Xmx512m -XX:MaxDirectMemorySize=512M -XX:MaxMetaspaceSize=512m -XX:CompressedClassSpaceSize=256M -XX:ReservedCodeCacheSize=256M
3. jstat (메모리 모니터링)
프로세스의 메모리 상태 보기
$> jstat [옵션] [pid] [ms] [반복회수 : 없으면 무한]
ex> jstat -gc 10222 1000
=> pid 10222에 대해 1초에 한번 프로세스 메모리 상태를 조회
아래 URL을 통해 GUI 값으로 확인 가능
http://nix-on.blogspot.com/2015/01/java-jstat-how-to-visualize-garbage.html
[옵션]
class : 클래스 로더의 동작에 관한 통계
compiler : 핫스팟 Just-In-Time 컴파일러 동작에 관한 통계
gc : 가비지 컬렉트된 Heap 동작에 관한 통계
gcapacity : 세대 마다 용량과 대응하는 영역에 관한 통계
gccause : gcutil의 직전 및 현재의 가비지 컬렉션 이벤트의 원인
gcnew : New 세대의 동작에 관한 통계
gcnewcapacity : New 세대의 사이즈와 대응하는 영역에 관한 통계
gcold : old 세대 및 Permanent 세대의 동작에 관한 통계
gcoldcapacity : Old 세대의 사이즈에 관한 통계
gcpermcapacity : Permanent 세대의 사이즈에 관한 통계
gcutil : 가비지 컬렉션 통계
printompilation : 핫스팟 컴파일 방법의 통계
4. 번외로 시스템 io 체크
iostat -x [인터벌] [회수]
$> iostat -x 1 10
'Language > JAVA' 카테고리의 다른 글
처음 배우는 스프링 부트 2 (build.gradle) (2) | 2020.04.29 |
---|---|
간단한 포트 확인용 에코 프로그램 (0) | 2013.01.29 |
Java 성능 모니터링에 대해 모르고 있던 5가지 사항, Part 1 (0) | 2012.05.02 |
개발자의 실수를 줄여주는 java.sql.Connection 만들기(퍼옴) (0) | 2012.04.20 |
엑셀 대용량 다운로드 가능하게 자바 만들기 (0) | 2012.04.05 |