jps(JVM Process Status Tool)
虛擬機進程狀況工具勺像,可以列出正在運行的虛擬機進程错森,并顯示虛擬機執(zhí)行主類(MainClass,main()函數(shù)所在的類)名稱以及這些進程的本地虛擬機唯一ID(Local Virtual Machine Identifier,LVMID)。
- 命令格式:
jps[options][hostid]
- 參數(shù):
-
-q
:只輸出LVMID涩维,省略主類名稱 -
-m
:輸出虛擬機進程啟動時傳給主類main()函數(shù)的參數(shù) -
-l
:輸出主類全名,如果進程執(zhí)行的時jar包則輸出jar路徑 -
-v
:輸出虛擬機進程啟動時的jvm參數(shù)
-
jstat(JVM Statistics Monitoring Tool)
虛擬機統(tǒng)計信息監(jiān)視工具辰狡,用于監(jiān)視虛擬機各種運行狀態(tài)信息的命令行工具垄分。它可以顯示本地或者遠程虛擬機進程中的類裝載、內(nèi)存薄湿、垃圾收集、JIT編譯等運行數(shù)據(jù)吆倦,在沒有GUI圖形界面坐求,只提供了純文本控制臺環(huán)境的服務(wù)器上蚕泽,它將是運行期定位虛擬機性能問題的首選工具。
- 命令格式:
jstat[option vmid[interval[s|ms][count]]]
- 對于命令格式中的VMID與LVMID需要特別說明一下:如果是本地虛擬機進程仔蝌,VMID與LVMID是一致的荒吏;如果是遠程虛擬機進程,那VMID的格式應(yīng)當(dāng)是:
[protocol:][//]lvmid[@hostname[:port]/servername]
- 參數(shù)interval和count代表查詢間隔和次數(shù)瞧挤,如果省略這兩個參數(shù)儡湾,說明只查詢一次。
// 每250毫秒查詢一次進程2764垃圾收集狀況盒粮,一共查詢20次
jstat-gc 2764 250 20
- 參數(shù):主要分為3類:類裝載奠滑、垃圾收集、運行
期編譯狀況-
-class
:監(jiān)視類裝載摊崭、卸載數(shù)量杰赛、總空間和類裝載消耗的時間 -
-gc
:監(jiān)視java堆狀況,包括Eden區(qū)乏屯、2個Survivor區(qū)、老年代蛤迎、永久代等的容量含友,已用空間,GC時間合計等信息 -
-gccapacity
: 監(jiān)視內(nèi)容與-gc
相同窘问,但輸出主要關(guān)注Java堆各個區(qū)域使用到的最大、最小空間 -
-gcutil
:監(jiān)視內(nèi)容與-gc
相同把鉴,但輸出主要關(guān)注已使用空間占總空間的百分百 -
-gccause
:與-gcutil
一樣儿咱,但會額外輸出上一次GC產(chǎn)生的原因 -
-gcnew
:監(jiān)視新生代GC的狀況 -
-gcnewcapacity
:監(jiān)視內(nèi)容與-gcnew
相同倍阐,輸出主要關(guān)注使用到的最大逗威、最小空間 -
-gcold
:監(jiān)視老年代GC的狀況 -
-gcoldcapacity
:監(jiān)視內(nèi)容與-gcold
相同,輸出主要關(guān)注使用到的最大凯旭、最小空間 -
-gcpermcapacity
:輸出永久代使用到的最大、最小空間 -
-compiler
:輸出JIT編譯過的方法鞠柄、耗時等信息 -
-printcompilation
:輸出已被JIT編譯的方法
-
jinfo(Configuration Info for Java)
Java配置信息工具嫉柴,可實時查看和調(diào)整虛擬機各項參數(shù)。
- 命令格式:
jinfo[option]pid
- 參數(shù):
-
-flag
:輸出指定args參數(shù)的值 -
-flags
:不需要args參數(shù)计螺,輸出所有JVM參數(shù)的值 -
-sysprops
:輸出系統(tǒng)屬性,等同于System.getProperties()
-
jmap(Memory Map for Java)
Java內(nèi)存映像工具用于生成堆轉(zhuǎn)儲快照(dump文件)
- 幾種獲得dump文件的方式
- jmap命令
- -XX:+HeapDumpOnOutOfMemoryError參數(shù)匙握,可以讓虛擬機在OOM異常出現(xiàn)之后自動生成dump文件
- -XX:+HeapDumpOnCtrlBreak參數(shù)則可以使用[Ctrl]+[Break]鍵讓虛擬機生成dump文件
- 在Linux系統(tǒng)下通過
Kill-3
命令發(fā)送進程退出信號也能拿到dump文件
- 命令格式:
jmap[option]vmid
- 參數(shù):
-
-dump
:生成堆轉(zhuǎn)儲快照 -
-finalizerinfo
:顯示在F-Queue隊列等待Finalizer線程執(zhí)行finalizer方法的對象 -
-heap
:顯示Java堆詳細信息 -
-histo
:顯示堆中對象的統(tǒng)計信息 -
-permstat
:以CLassLoader為統(tǒng)計口徑顯示永久代內(nèi)存狀態(tài) -
-F
:當(dāng)-dump沒有響應(yīng)時陈轿,強制生成dump快照
-
jhat(JVM Heap Analysis Tool)
與jmap搭配使用,用來分析jmap生成的堆轉(zhuǎn)儲快照蛾娶。jhat內(nèi)置了一個微型的HTTP/HTML服務(wù)器潜秋,生成dump文件的分析結(jié)果后,可以在瀏覽器中查看半等。
- 命令格式:
jhat [dumpfile]
- 不推薦使用此命令,有2個原因:
- 一般不會直接在服務(wù)器上分析dump文件莽囤,浪費服務(wù)器資源切距。
- 分析功能簡陋,推薦用專業(yè)的可視化分析工具,比如VisualVM
jstack(Stack Trace for Java)
Java堆棧跟蹤工具北秽,用于生成虛擬機當(dāng)前時刻的線程快照最筒。
線程快照就是當(dāng)前虛擬機內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現(xiàn)長時間停頓的原因床蜘,如線程間死鎖、死循環(huán)扬蕊、請求外部資源導(dǎo)致的長時間等待等都是導(dǎo)致線程長時間停頓的常見原因丹擎。
線程出現(xiàn)停頓的時候通過jstack來查看各個線程的調(diào)用堆棧,就可以知道沒有響應(yīng)的線程到底在后臺做些什么事情蒂培,或者等待著什么資源。
- 命令格式:
jstack[option]vmid
- 參數(shù):
-
-F
:當(dāng)正常輸出的請求不被響應(yīng)時,強制輸出線程堆棧 -
-l
:除堆棧外单刁,顯示關(guān)于鎖的附加信息 -
-m
:如果調(diào)用本地方法,可顯示C/C++的堆棧
-
- 在JDK 1.5中肺樟,
java.lang.Thread
類新增了一個getAllStackTraces()
方法用于獲取虛擬機中所有線程的StackTraceElement對象逻淌。