02 jmap+MAT(內存溢出)、jstack(線程、死循環、死鎖)

jmap+MAT

詳情參考jmap 官方文檔html

內存溢出演示:
最終代碼: monitor_tuning
爲快速產生內存溢出,右擊 Run As>Run Configurations, Arguments 標籤VM arguments 中填入
-Xmx32M -Xms32M

 

–XX:MetaspaceSize=32M –XX:MaxMetaspaceSize=32M(同時在 pom.xml 中加入 asm 的依賴)java

訪問 http://localhost:8080/nonheapgit

內存溢出自動導出github

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
右擊 Run As>Run Configurations, Arguments 標籤VM arguments 中填入
-Xmx32M -Xms32M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./
能夠看到自動在當前目錄中生成了一個java_pid660.hprof文件
另外一種導出溢出也更推薦的方式是jmap

 

option: -heap, -clstats, -dump:<dump-options>, -F
jmap -dump:format=b,file=heap.hprof <pid>
 
JAVA生產環境性能監控與調優

MAT下載地址:http://www.eclipse.org/mat/spring

找開上述導出的內存溢出文件便可進行分析,以下圖的溢出源頭分析:oracle

JAVA生產環境性能監控與調優

jstack

詳情參考 jstack 官方文檔app

jstack <pid>eclipse

可查看其中包含java.lang.Thread.State: WAITING (parking),JAVA 線程包含的狀態有:maven

NEW:線程還沒有啓動oop

RUNNABLE:線程正在 JVM 中執行

BLOCKED:線程在等待監控鎖(monitor lock)

WAITING:線程在等待另外一個線程進行特定操做(時間不肯定)

TIMED_WAITING:線程等待另外一個線程進行限時操做

TERMINATED:線程已退出

JAVA生產環境性能監控與調優

monitor_tuning中新增CpuController.java

mvn clean package -Dmaven.test.skip

mvn 打包提速參考 CSDN

此時會生成一個monitor_tuning-0.0.1-SNAPSHOT.jar的 jar包,爲避免本地的 CPU 消耗過多致使死機,建議上傳上傳到虛擬機進行測試

nohup java -jar monitor_tuning-0.0.1-SNAPSHOT.jar &

訪問 http://xx.xx.xx.xx:12345/loop(端口12345在application.properties文件中定義)

top -p <pid> -H能夠查看線程及 CPU 消耗狀況

JAVA生產環境性能監控與調優

使用 jstack <pid>能夠導出追蹤文件,文件中 PID 在 jstack 中顯示的對應 nid 爲十六進制(命令行可執行 printf ‘%x’ <pid>能夠進行轉化,如1640對應的十六進制爲668)

相關文章
相關標籤/搜索