當我們進入JDK的安裝目錄裡面的/bin目錄,會發現有很多小工具,有我們熟悉的也經常用的java,javac,也有很多我們不怎麼用到很陌生的工具.下面看看哪些平時不怎麼用到的工具吧.
可以列出正在運行的虛擬機進程,並顯示虛擬機執行主類(Main Class,main()函數所在的類)名稱以及這些進程的本地虛擬機唯一ID(Local Virtual Machine Identifier,LVMID).
對於本地虛擬機進程來說,LVMID與操作系統進程的ID(Process Identifier,PID) 是一致的.
jps命令格式:
jps [ options ] [ hostid ]
例如:(由於我沒有運行什麼程序,所只有sun.tools.jps.Jps這一個了)
一些常用參數:
I> -q:只輸出LVMID,省略主類的名稱
II> -m:輸出虛擬機進程啟動時傳遞給主類main()函數的參數
III> -l:輸出主類的全名,如果進程執行的是Jar包,輸出Jar路徑
IV> -v:輸出虛擬機進程啟動時JVM參數
jstat> JVM Statistics Monitoring Tool,用於收集HotSpot虛擬機各方面的運行數據.它可以顯示本地或者遠程虛擬機進程中的類裝載,內存,垃圾收集,JIT編譯等運行數據,在沒有GUI圖形界面,只提供類純文本控制台環境的服務器上,它將是運行期定位虛擬機性能問題的首選工具.
jstat命令格式為:
jstat [ option vmid [ interval [ s | ms ] [ count ] ] ]
說明:I> 如果是本地虛擬機進程,VMID與LVMID是一致的.
II> interval 和 count 代表查詢間隔和次數,省略說明只查詢一次.
例如:jstat -gc 4158 300 10 表示每300毫秒查詢一次進程4158垃圾收集狀況,一共查詢10次.
III> optin代表這用戶希望查詢的虛擬機信息,主要分為3類:類裝載,垃圾收集,運行編譯狀況.
jinfo> Configuration Info for Java,顯示虛擬機配置信息
jinfo命令格式:
jinfo [ optin ] pid
參數:
I> -flag可以查詢未被顯示指定的參數的系統默認值.
例如:
jmap> Memory Map for Java,生成虛擬機的內存轉儲快照(heapdump文件).還可以查詢finalize執行隊列,Java堆和永久代的詳細信息,如空間利用率,當前用的是哪種收集器等.
jmap命令格式:
jmap [ optin ] vimd
參數:
I> -dump:生成Java堆轉儲快照.格式為:-dump:[live,]format=b,file=<filename>,其中live子參數說明是否只dump出存活的對象.
II> -finalizerinfo:顯示在F-Queue中等待Finalizer線程執行finalize()方法的對象.只在Linux/Solaris平台下有效.
III> -heap:顯示Java堆詳細信息,如使用哪種回收器,參數值,分代狀況等.只在Linux/Solaris平台下有效.
IV> -histo:顯示堆中對象統計信息,包括類,實例數量,合計容量.
V> -permstat:以ClassLoader為統計口徑顯示永久代內存狀況.只在Linux/Solaris平台下有效.
VI> -F:當虛擬機進程對-dump選項沒有響應時,可使用這個選項強制生成dump快照.只在Linux/Solaris平台下有效.
jstack> Stack Trace for Java,顯示虛擬機的線程快照.
線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合,生成快照的主要目的是定位線程出現長時間停頓的原因.
jstack [ option ] vmid
參數:
I> -F:當正常輸出的請求不被響應時,強制輸出線程堆棧
II> -l:除了堆棧外,顯示關於鎖的附加信息
III> -m:如果調用到本地方法的話,可以顯示C/C++的堆棧
例如(這裡只是部分結果截圖):