1 基於jdk命令行的工具
1.1jvm的參數類型
- 標準參數
-help
-server -client
-version -showversion
-cp -classpath
- X參數
非標準化參數
-Xint :解釋執行
-Xcomp : 第一次使用就編譯成本地代碼
-Xmixed: jvm決定是否編譯成本地代碼
- XX參數
Boolean類型
格式:-XX:[+-]<name>標識啓用或者禁用name屬性
案例:-XX:+UseG1Gc
key=value類型
格式:-XX:<key>=<value> 表示name屬性的值是value
案例:-XX:MaxGcMillis=500
注意:-Xms等價於-XX:InitialHeapSize,-Xmx等價於-XX:MaxHeapSize
1.2 查看jvm運行時的參數
官方工具文檔
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html
常用命令
-XX:+PringFlagsInital
=表示默認值
:=表示被用戶或者jvm修改後的值
-XX:+PringFlagsFinal
-XX:+UnlockExperimentalVMOptions //解鎖實驗參數
-XX:+UnlockDiagnosticVMOptions //解鎖診斷參數
-XX:PringCommandLineFlags
jstat查看jvm統計信息
類加載信息
Gc信息
jit編譯
jps
jinfo
1.3jmap+MAT內存溢出
1 導出內存映像文件
1.1 內存溢出自動導出
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
1.2 使用jmap命令手動導出
jmap -help
jmap -dump:format=b,file=heap.hprof pid
2 使用mat工具分析內存溢出
1.4 jstack查看線程狀態
// 查看java進程pid
jps -l
//將這個棧信息輸出到指定的文件
jstack pid > pid.txt
top -H -p pid # 顯示某個進程所有活躍的線程消耗情況
1.5 基於JVisualVm的可視化監控
https://visualvm.github.io/documentation.html
1.6 基於Btrace的
https://www.jianshu.com/p/93e94b724476
BTrace是Java的安全可靠的動態跟蹤工具。 他的工作原理是通過 instrument + asm 來對正在運行的java程序中的class類進行動態增強.
攔截方法
普通方法:@OnMethod(clazz="",method="",location=() )
構造方法:@OnMethod(clazz="",method="<init>,location=() )
同名方法:根據方法的參數類型區別
攔截時機
Kind.ENTRY //入口,默認
Kind.RETURN
Kind.THROW
Kind.LINE //攔截第多少行的代碼
注意事項:調用自己本地的代碼。