사용자 도구

사이트 도구


wiki:java:analysis

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
wiki:java:analysis [2022/07/08 22:07]
dhan 만듦
wiki:java:analysis [2023/01/13 18:44] (현재)
줄 1: 줄 1:
 +====== 주제 ======
 +<WRAP left notice 80%>
 +  * description : 자바 프로그램 분석 방법 기술, 힙영역 분석, 쓰레드 분석
 +  * author      : 주레피
 +  * email       : dhan@repia.com
 +  * lastupdate  : 2022-07-10
 +</WRAP>
 + 
 +===== Intro =====
  
 +===== Case Study =====
 + 
 +===== Tools =====
 +==== jps ====
 +JVM 프로세스 목록을 확인할 수 있음
 +<code bash>
 +$> jps -v
 +32128 Jps -Dapplication.home=/PROJECT/dge.repia.com/SearchApp/jdk1.8.0_202 -Xms8m
 +5287 Server
 +24487 Bootstrap -Djava.util.logging.config.file=/WAS_APPS/tomcat-instance/kigam.repia.com/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Denv=product -Denv.servername=kigam.repia.com -Dignore.endorsed.dirs= -Dcatalina.base=/WAS_APPS/tomcat-instance/kigam.repia.com -Dcatalina.home=/WAS_APPS/apache-tomcat-8.5.76 -Djava.io.tmpdir=/WAS_APPS/tomcat-instance/kigam.repia.com/temp
 +22156 Bootstrap -Djava.util.logging.config.file=/WAS_APPS/tomcat-instance/dge.repia.com/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Denv=product -Denv.servername=dge.repia.com -Dignore.endorsed.dirs= -Dcatalina.base=/WAS_APPS/tomcat-instance/dge.repia.com -Dcatalina.home=/WAS_APPS/apache-tomcat-8.5.76 -Djava.io.tmpdir=/WAS_APPS/tomcat-instance/dge.repia.com/temp
 +26732 Server
 +27185 jar
 +14770 Server
 +26132 jar
 +18037 Server
 +20021 jar
 +25242 Bootstrap -Djava.util.logging.config.file=/usr/local/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/usr/local/tomcat8 -Dcatalina.home=/usr/local/tomcat8 -Djava.io.tmpdir=/usr/local/tomcat8/temp
 +32412 jar
 +11933 jar
 +26878 Bootstrap -Djava.util.logging.config.file=/WAS_APPS/tomcat-instance/centos79.repia.com/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Denv=product -Denv.servername=centos79.repia.com -Dignore.endorsed.dirs= -Dcatalina.base=/WAS_APPS/tomcat-instance/centos79.repia.com -Dcatalina.home=/WAS_APPS/apache-tomcat-8.5.76 -Djava.io.tmpdir=/WAS_APPS/tomcat-instance/centos79.repia.com/temp
 +</code>
  
 +==== jmap ====
 +현재 실행 중인 JVM 프로세스의 메모리 맵(map)을 확인할 수 있음 \\
 +JVM의 힙 메모리 정보를 얻어오거나 덤프를 떠서 분석해 볼 수 있다.
  
 +<code bash>
 +$> jmap -heap 200021
 +[root@sofo dump]# /PROJECT/dge.repia.com/SearchApp/java8/bin/jmap -heap 20021
 +Attaching to process ID 20021, please wait...
 +Debugger attached successfully.
 +Server compiler detected.
 +JVM version is 25.202-b08
  
 +using thread-local object allocation.
 +Parallel GC with 8 thread(s)
  
 +Heap Configuration:
 +   MinHeapFreeRatio         = 0
 +   MaxHeapFreeRatio         = 100
 +   MaxHeapSize              = 2009071616 (1916.0MB)
 +   NewSize                  = 41943040 (40.0MB)
 +   MaxNewSize               = 669515776 (638.5MB)
 +   OldSize                  = 83886080 (80.0MB)
 +   NewRatio                 = 2
 +   SurvivorRatio            = 8
 +   MetaspaceSize            = 21807104 (20.796875MB)
 +   CompressedClassSpaceSize = 1073741824 (1024.0MB)
 +   MaxMetaspaceSize         = 17592186044415 MB
 +   G1HeapRegionSize         = 0 (0.0MB)
  
 +Heap Usage:
 +PS Young Generation
 +Eden Space:
 +   capacity = 125829120 (120.0MB)
 +   used     = 41686504 (39.755348205566406MB)
 +   free     = 84142616 (80.2446517944336MB)
 +   33.12945683797201% used
 +From Space:
 +   capacity = 5242880 (5.0MB)
 +   used     = 5231912 (4.989540100097656MB)
 +   free     = 10968 (0.01045989990234375MB)
 +   99.79080200195312% used
 +To Space:
 +   capacity = 5242880 (5.0MB)
 +   used     = 0 (0.0MB)
 +   free     = 5242880 (5.0MB)
 +   0.0% used
 +PS Old Generation
 +   capacity = 83886080 (80.0MB)
 +   used     = 6313904 (6.0214080810546875MB)
 +   free     = 77572176 (73.97859191894531MB)
 +   7.526760101318359% used
  
 +1711 interned Strings occupying 144344 bytes.
 +
 +// JVM 메모리 통계
 +$> jmap -F -histo 20021
 +
 +// 메모리 덤프
 +$> jmap -F -dump:format=b,file=heap.hprof 20021 
 +
 +==== jhat ====
 +메모리 덤프 파일 분석
 +<code bash>
 +$> jhat heap.hprof -port 7000
 +</code>
 +
 +===== Term =====
 + 
 +===== Tip =====
 + 
 +===== Troubleshooting =====
 + 
  
 ===== Ref ===== ===== Ref =====
   * [[https://hbase.tistory.com/180|[Java] 자바 메모리 덤프 분석 - jps, jmap, jhat 사용법 및 예제]]   * [[https://hbase.tistory.com/180|[Java] 자바 메모리 덤프 분석 - jps, jmap, jhat 사용법 및 예제]]
 +  * [[https://steady-coding.tistory.com/591|[Java] Heap 모니터링 & Heap Dump 분석하기]]
 +  * [[https://ijbgo.tistory.com/33|Thread Dump 분석]]
 +  * [[https://blog.heaphero.io/2017/10/13/how-to-capture-java-heap-dumps-7-options/|HOW TO CAPTURE JAVA HEAP DUMPS? – 7 OPTIONS]]
 +
 +{{tag>heapdump tda 주레피 메모리덤프 visualvm TDA}}
 +
/volume1/web/dokuwiki/data/attic/wiki/java/analysis.1657285661.txt.gz · 마지막으로 수정됨: 2022/07/08 22:07 저자 dhan