jps(JVM Process Status Tool)是JDK中的一個小工具,它的功能和UNIX的ps命令類似:可以列出正在運行的虛擬機進程,並顯示虛擬機執行主類(Main Class,main()函數所在的類)名稱以及這些進程的本地虛擬機唯一ID(LVMID,Local Virtual Machine Identifier),LVMID和作業系統的進程ID是一致的,當同時啟動多個虛擬機進程,無法根據進程名稱進行定位時,就可以使用jps命令顯示主類的功能來區分。
jps命令格式:
jps [options] [hostid]
jps使用示例:
jps還可以通過RMI協議查詢開啟了RMI服務的遠程虛擬機進程狀態,參數hostid為RMI註冊表中註冊的主機名,jps的其他常用選項如下:
-q 只輸出LVMID,省略主類的名稱
-m 輸出虛擬機進程啟動時傳遞給主類main()函數的參數
-l 輸出主類的全名,如果進程執行的是jar包,則輸出JAR路徑
-v 輸出虛擬機進程啟動時的JVM參數
jstat(虛擬機統計信息監視工具)
jstat(JVM Statistics Monitoring Tool)是用於監視虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或遠程虛擬機進程中的類加載、內存、垃圾收集、即時編譯器等運行時數據,由於伺服器一般都是沒有GUI界面的,因此可以使用此工具定位性能問題。
jstat命令格式為:
jstat [option vmid [interval [s|ms] [count]]]
對於命令格式中的VMID需要注意的是:如果是本地虛擬機進程,VMID就是LVMID,對於遠程虛擬機進程,那麼VMID的格式就是:
[protocol:] [//]vmid [@hostname[:port] /servername]
參數interval和count代表查詢間隔和查詢次數,如果省略了,則表示只查詢一次。假設每2000毫秒查詢進程16656新生代垃圾收集情況,一共查詢10次,則命令應當是:
jstat -gcnew 16656 2000 10
查詢示例:
選項option表示用戶希望查詢的虛擬機信息,主要分為三類:類加載、垃圾收集、運行期編譯狀況,主要有如下選項:
-class 監視類加載、卸載數量、總空間以及類裝載所耗費的時間
-gc 監視Java堆狀況,包括Eden區、2個Survivor區、老年代、元空間等的容量,已用空間,垃圾收集時間合計等信息
-gccapacity 監視內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大、最小空間
-gcutil 監視內容與-gc基本相同,但輸出主要關注一使用空間佔總空間的百分比
-gccause 與-gcutil功能一樣,但是會額外輸出導致上一次垃圾收集產生的原因
-gcnew 監視新生代垃圾收集情況
-gcnewcapacity 監視內容與-gcnew基本相同,輸出主要關注使用到的最大、最小空間
-gcold 監視老年代垃圾收集情況
-gcoldcapacity 監視內容與-gcold基本相同,輸出主要關注使用到的最大、最小空間
-gcmetacapacity 輸出原空間使用到的最大、最小空間
-compiler 輸出即時編譯器編譯過的方法、耗時等信息
-printcompilation 輸出已經被即時編譯的方法
jmap(Java內存映像工具)
jmap(Memory Map for Java)命令用於生成堆轉儲快照(一般稱為heapdump或dump文件)。如果不使用jmap命令,也可以在啟動虛擬機時添加-XX:HeapDumpOnOutOfMemoryError參數,當虛擬機發生內存溢出異常之後就會自動生成堆轉儲快照文件;通過添加-XX:HeapDumpOnCtrlBreak參數,可以使用[Ctrl]+[Break]鍵讓虛擬機生成堆轉儲快照文件。此外,在Linux系統下,通過發送kill -3命令發送進程退出信號「恐嚇」一下虛擬機,也能拿到堆轉儲快照。
jmap命令不僅能獲取堆轉儲快照,還可以查詢finalize執行隊列、Java堆和方法區的詳細信息,如空間使用率、當前使用到時哪種垃圾收集器等。在Windows下,僅-dump和-histo選項可以使用,其餘的在Linux/Solaris平臺下才有效。
jmap的命令格式:
jmap [option] vmid
option選項的合法值和含義如下:
-dump 生成Java堆轉儲快照。格式為-dump:[live,]format=b,file=<filename>,其中live子參數說明是否只dump出存活的對象
-finalizerinfo 顯示在F-Queue中等待Finalizer線程執行finalize方法的對象。只在Linux/Solaris平臺下有效。
-heap 顯示Java堆詳細信息,如使用哪種垃圾收集器、參數配置、分代狀況等。只在Linux/Solaris平臺下有效。
-histo 顯示堆中對象統計信息,包括類、實例數量、合計容量。
-permstat 以ClassLoader為統計口徑顯示永久代內存狀態。只在Linux/Solaris平臺下有效。
-F 當虛擬機進程堆-dump選項沒有響應時,可使用這個選項強制生成dump快照。只在Linux/Solaris平臺下有效。
使用示例: