一、jps : 虛擬機進程狀況工具
它可以列出正在運行的虛擬機進程,並顯示虛擬機執行主類(Main Class,main()函數所在的類)名稱以及正在運行的本地虛擬機唯一ID(LVMID);
它是使用率最高的一個JDK命令行工具,因爲其他的命令行工具都需要輸入查詢到的ID來確定要監控的是哪一個虛擬機進程。
命令格式:jps [options] [hostid]
選項 | 作用 |
---|---|
-q | 只輸出LVMID,省略主類的名稱 |
-m | 輸出虛擬機進程啓動時傳遞給主類main()函數的參數 |
-l | 輸出主類的全名,如果進程執行的是Jar包,輸出Jar包路徑; |
-v | 輸出虛擬機進程啓動時的JVM參數; |
二、jstat:虛擬機統計信息監視工具
用於監視虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或者遠程虛擬機進程中的類加載、內存、垃圾收集、JIT編譯等運行時數據,它是運行期定位虛擬機性能的首選工具。
命令格式:jstat [option vmid [interval [s | ms] [count] ] ]
對於命令行中的VMID與LVMID需要特別說明一下:如果是本地虛擬機進程,兩者是一致的,如果是遠程虛擬機進程,兩者是不一樣的;
參數interval 和 count 代表查詢間隔和次數如果省略這兩個參數,說明只查詢一次;
jstat -gc 2764 250 20
代表需要每250ms查詢一次進程2764垃圾收集情況,一共查詢20次;
選項option代表用戶希望查詢什麼信息,主要分爲三類:類加載、垃圾收集、運行期編譯狀況;
選項 | 作用 |
---|---|
-class | 監視類的裝載、卸載數量、總空間以及類裝載所耗費的時間 |
-gc | 監視Java堆狀況、包括Eden區、兩個survivor區、老年代、永久代等的容量、已用空間、GC時間合計等信息 |
-gcutil | 監視內容與-gc基本相同,主要輸出的是使用空間的百分比 |
-gcnew | 監視新生代GC狀況 |
-gcold | 監視老年代GC情況 |
-compiler | 輸出JIT編譯器編譯過的方法、耗時等信息 |
三、jinfo:Java配置信息工具
可以做到實時查看和調整虛擬機各項參數
命令格式:jinfo [option] pid
四、jmap:Java內存映像工具
用於生成堆轉儲快照(一般稱爲heapmap或dump文件)。還可以查詢finalize執行隊列、Java堆和永久代的詳細信息,如空間使用率、當前用的是哪種收集器等。
命令格式:jmap [option] vmid
選項 | 作用 |
---|---|
-dump | 生成Java堆轉儲快照。格式爲:dump:[live, ]format=b, file=,其中live參數說明是否只dump出存活對象。 |
-finalizerinfo | 顯示在F-Queue中等待Finalizer線程執行finalize方法的對象。 |
-heap | 顯示Java堆詳細信息,如使用哪種回收器、參數配置、分代狀況等。 |
-histo | 顯示堆中對象的統計信息,包括類、實例數量、合計容量。 |
-permstat | 以classLoader爲統計口徑顯示永久代內存狀態; |
-F | 當虛擬機進程對-dump選項沒有響應時,可使用這個選項強制生成dump快照; |
五、jhat:虛擬機堆轉儲快照分析工具
該命令與jmap搭配使用,來分析jmap生成的堆轉儲快照文件。jhat內置了一個微型的HTTP/HTML服務器,生成dump文件的分析結果後,可以在瀏覽器查看(http://localhost:7000/)。
但是在實際應用中來講,除非沒有其他工具來分析dump文件,否則一般不會使用它來分析,有兩點原因:
1、一般不會在部署應用程序的服務器上直接分析dump文件,因爲分析工作是一個耗時且消耗硬件資源的過程;
2、jhat的分析功能相對來說比較簡陋,後面會介紹到VisualVM;
首先使用jmap生成dump文件,再使用jhat解析:
在瀏覽器查看dump文件:http://localhost:7000/
六、jstack:Java堆棧跟蹤工具
用於生成虛擬機當前時刻的線程快照(一般稱爲threaddump或者javacore文件)。線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧集合,生成線程快照的主要目的是定位現場出現長時間停頓的原因,如線程死鎖、死循環、請求外部資源導致長時間等待等都是線程長時間等待的原因。
命令格式:jstack [option] vmid
選項 | 作用 |
---|---|
-F | 當正常請求不被響應時,強制輸出線程堆棧 |
-l | 除堆棧外,顯示關於鎖的附加信息 |
-m | 如果調用到本地方法的話,可以顯示C/C++的堆棧 |
七、VisualVm:多合一故障處理工具
用於運行監視、故障處理、性能分析。它對應用程序的實際性能影響很小,可以直接應用在生產環境中。
在命令行輸入:jvisualvm
會彈出下面窗口
我們可以手動在這裏安裝很多插件更好的進行JVM性能調優;
VisualGC是一個很好用的插件!
打開工具 -> 插件 -> 可用插件,如果沒有可用插件就到http://visualvm.github.io/index.html中選擇最新的url地址,將”設置“中的url地址更改爲我們訪問到的github上找到的對應我們JDK版本的地址;
首先找見plugins:
找見對應自己JDK版本的更新地址
進入jvisualvm插件管理,修改url地址
之後就可以在可用插件安裝相應插件了
VisualGC頁面