這些工具大多數是tools.jar類庫的一層薄的包裝,它們的主要功能代碼是在tools類庫中實現的。還有一些甚至就是由Shell腳本直接生成的。html
名稱 | 做用 | |
---|---|---|
jps | JVM Process Status Tool,顯示指定系統內全部的HotSpot虛擬機進程 | |
jstat | JVM Statistics Monitoring Tool,用於收集HotSpot虛擬機各方面的運行數據 | |
jinfo | Configuration Info for Java,顯示虛擬機配置信息 | |
jmap | Memory Map for Java,生成虛擬機的內存轉儲快照(heapdump文件) | |
jhat | JVM Heap Dump Browser,用於分析heapmap文件,它會創建一個http/html服務器讓用戶能夠在瀏覽器上查看分析結果 | |
jstack | Stack Trace for Java,顯示虛擬機的線程快照 |
jsp [options] [hostid]
java
屬性 | 做用c++
-p | 只輸出LVMID,省略主類的名稱
-m | 輸出虛擬機進程啓動時傳遞給主類main()函數的參數
-l | 輸出主類的全名,若是進程執行的是jar包,輸出jar路徑
-v | 輸出虛擬機進程啓動時jvm參數瀏覽器
jstat是用於監視虛擬機各類運行狀態信息的命令行工具。它能夠顯示本地或者遠程虛擬機進程中的類裝載、內存、垃圾回收、JIT編譯等運行數據,在沒有GUI圖形界面,只是提供了純文本控制檯環境的服務器上,它將是運行期定位虛擬機性能問題的首選工具。服務器
jstat [option vmid [interval [s|ms] [count]]]
[protocol:] [//] lvmid[@hostname[:port]/servername]
選項 | 做用 |
---|---|
-class | 監視裝載類、卸載類、總空間以及類裝載所耗費的時間 |
-gc | 監視java堆情況,包括eden區、兩個survivor區、老年代、永久代等的容量、已用空間、GC時間合計信息 |
-gccapacity | 監視內容與-gc基本相同,但輸出主要關注java堆各個區域使用到最大、最小空間 |
-gcutil | 監視內容與-gc基本相同,但輸出主要關注已使用控件佔總空間的百分比 |
-gccause | 與-gcutil功能同樣,可是會額外輸出致使上一次gc產生的緣由 |
-gcnew | 監視新生代GC狀況 |
-gcnewcapacity | 監視內容與-gcnew基本相同,輸出主要關注使用到的最大、最小空間 |
-gcold | 監視老年代GC狀況 |
-gcoldcapacity | 監視內容與-gcold基本相同,輸出主要關注使用到的最大、最小空間 |
-gcpermcapacity | 輸出永久代使用到的最大、最小空間 |
-compiler | 輸出JIT編譯過的方法、耗時等信息 |
-printcompilation | 輸出已經被JIT編譯過的方法 |
jinfo的做用是實時的查看和調整虛擬機各項參數。多線程
jinfo [option] pid
jvm
選項 | 做用 |
---|---|
-flag <name> | to print the value of the named VM flag |
-flag [+/-]<name> | to enable or disable the named VM flag |
-flag <name>=<value> | to set the named VM flag to the given value |
-flags | to print VM flags |
-sysprops | to print Java system properties |
<no option> | to print both of the above |
-h / -help | to print this help message |
jmap [option] vmid
jsp
選項 | 做用 |
---|---|
-dump | 生成java堆轉儲快照。格式爲: -dump:[live,]format=b,file=<filename>,其中live子參數說明是否只dump出存活的對象 |
-finalizerinfo | 顯示在F-Queue中等待Finalizer線程執行finalize方法的對象。只在Linux/Solaris平臺下有效 |
-heap | 顯示java堆詳細信息,如使用哪一種收集器、參數配置、分代狀況等,在Linux/Solaris平臺下有效 |
-jisto | 顯示堆中對象統計信息,包含類、實例對象、合集容量 |
-permstat | 以ClassLoader爲統計口徑顯示永久代內存狀態。只在Linux/Solaris平臺下有效 |
-F | 當虛擬機進程對-dump選項沒有相應時。可以使用這個選項強制生成dump快照。只在Linux/Solaris平臺下有效 |
jhat [ options ] heap-dump-file
ide
jstack [option] vmid
函數
選項 | 做用 |
---|---|
-F | 當正常輸出的請求不被響應時,強制輸出線程堆棧 |
-l | 除堆棧外,顯示關於鎖的附加信息 |
-m | 若是調用到本地方法的話,能夠顯示c/c++的堆棧 |
JConsole ( Java Monitoring and Management Console ) 是—種基於JMX的可視化監視管理工具。它管理部分的功能是針對JMX MBean進行管理,因爲MBean可使用代碼、中間件服務器的管理控制檯或者全部符合JMX規範的軟件進行訪問。
「概述」頁籤顯示的是整個虛擬機主要運行數據的概覽,其中包括「堆內存使用狀況」、「線程」、「類」、「CPU使用狀況」4種信息的曲線圖
「內存」頁籤至關於可視化的jstat命令,用於監視受收集器管理的虛擬機內存(Java堆和永久代)的變化趨勢。
「線程」頁籤的功能至關於可視化的jstack命令,遇到線程停頓時可使用這個頁籤進行監控分析。
VisualVM(All-in-One Java Troubleshooting Tool)是到目前爲止隨JDK發佈的功能最強大的運行監視和故障處理程序,而且能夠預見在將來一段時間內都是官方主力發展的虛擬機故障處理工具。官方在VisualVM的軟件說明中寫上了「All-in-One」 的描述字樣,預示着它除了運行監視、故障處理外,還提供了不少其餘方面的功能。如性能分析,VisualVM的性能分析功能甚至比起JProfiler、YourKit等專業且收費的Profiling工具都不會遜色多少,並且VisualVM的還有一個很大的優勢:不須要被監視的程序基於特殊Agent運行,所以它對應用程序的實際性能的影響很小,使得它能夠直接應用在生產環境中。這個優勢是JProfiler、YourKit等工具沒法與之媲美的。
VisualVM基於NetBeans平臺開發,所以它一開始就具有了插件擴展功能的特性,經過插件擴展支持,VisualVM能夠作到:
在VisualVM中生成dump文件有兩種方式,能夠執行下列任一操做:
在Profiler頁籤中,VisualVM提供了程序運行期間方法級的CPU執行時間分析以及內存分析,作Profiling分析確定會對程序運行性能有比較大的影響,因此通常不在生產環境中使用這項功能。
BTrace自己也是能夠獨立運行的程序。它的做用是在不中止目標程序運行的前提下,經過HotSpot虛擬機的HotSwap技術動態加入本來並不存在的調試代碼。這項功能對實際生產中的程序頗有意義:常常遇到程序出現問題,但排查錯誤的一些必要信息,譬如方法參數、返回值等,在開發時並無打印到日誌之中,以致於不得不停掉服務,經過調試增量來加入日誌代碼以解決問題。當遇到生產環境服務沒法隨便中止時,缺一兩句日誌致使排錯進行不下去是一件很是鬱悶的事情。BTrace的用法還有許多,打印調用堆棧、參數、返回值只是最基本的應用,在它的網站上有使用BTrace進行性能監視、定位鏈接泄漏和內存泄漏、解決多線程競爭問題的例子。