jvm工具介紹和效能調優
jvm工具
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/
- Jps
- Jstat
- Jinfo
- Jmap
- Jhat
- Jstack
- JConsole
Jps (Java process status Java)程序狀態 使用頻率最高的
-
- 本地虛擬機器唯一id lvmid local virtual machine id
- jps -m 執行時傳入主類的引數
- jps -v 虛擬機器引數
- jps -l 執行的主類全名或者jar包名稱
Jstat
檢視類裝載,記憶體,垃圾收集,jit編譯的資訊
詳細資訊可以參見:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html
jstat -gcutil pid:檢視某個Java程序的gc情況
S0:年輕代中一個survivor的容量(位元組)
S1:年輕代中二個survivor的容量(位元組)
E:年輕代中Eden的容量(位元組)
O:old的的容量
M:matespace(元空間)
CCS:壓縮類的空間
YGC:從應用程式啟動到取樣時年輕代中gc的次數
YGCT:從應用程式啟動到取樣時年輕代中gc的次數所用的時間(s)
FGC:從應用程式啟動到取樣時老年代(full gc)中gc的次數
FGCT:從應用程式啟動到取樣時老年代(full gc)中gc的次數所用的時間(s)
GCT:從應用程式啟動到取樣時gc用的總時間
Jinfo
檢視java 虛擬機器引數
jinfo -flag UseSerialGC pid 檢視虛擬機器引數的狀態
檢視當前jvm所用的是否是serial的gc.
Jmap
生成堆儲存快照的工具
jmap -dump:format=b,file=d:\a.bin 1016
馬上匯出當前的Java堆儲存快照資訊
當設定了虛擬機器的引數:-XX:+HeapDumpOnOutOfMemoryError
JVM會在遇到OutOfMemoryError時拍攝一個“堆轉儲快照”,並將其儲存在一個檔案中。
而jmap的jmap -dump的轉堆儲存快照的功能和上面的引數設定的實現的功能是一致的。
jmap -histo 1016 | more 檢視堆中的物件資訊
Jhat(jvm heap analysis tool)
java堆的分析工具(不常使用)
Jstack
生成每一個執行緒快照(可以根據快照分析執行緒是否出現了問題)
在程式碼中可以使用Thread.getAllStackTraces(),這個方法獲取專案中所有執行緒的相關資訊,返回的是一個map集合。
JConsole
圖形化工具
VisualVM 最強大的監控工具
外部工具
https://visualvm.github/pluginscenters.html