性能監控與調優的工具主要分爲 命令行工具和圖形化界面工具java
JDK中的bin目錄下「贈送」了不少體積小(幾十KB) 且功能強大的虛擬機監控和故障處理工具。
這些工具體積小的主要緣由並不是是 JDK開發團隊刻意精煉所致,而是這些工具自己是對 tools.jar類庫的一層簡單包裝,工具主要功能的實現代碼都在tools.jar中。若是是Linux版本的JDK,這些工具甚至是有shell編寫而成。shell須要注意的是,有些工具是基於JMX工做的,在JDK1.5和之前的版本須要添加參數 -Dcom.sun.management.jmxremote 開啓JMX管理功能。而在JDK1.6以後的版本中,JMX是默認開啓的,無需添加參數windows
JVM Process Status Tool
虛擬機進程狀態工具
jps的功能和ps命令相似,能夠列出正在運行的虛擬機進程,並顯示虛擬機執行主類的名稱,以及這些進程的本地虛擬機的惟一ID(LVMID, Local Virtual Machine Identifier),對於本地虛擬機進程來講,LVMID與炒做系統的進程ID(PID, Process Identifier)是一致的,若是同時啓動了多個虛擬機進程,難以靠PID來定位,多數經過jps 命令顯示主類來加以區分。瀏覽器
* jps 命令格式: *服務器
jps [options] [hostid] hostid 爲 RMI 註冊表中的 主機名 默認爲 localhost
函數
選項 | 做用 |
---|---|
-q | 只輸出LVMID, 省略主類的名稱 |
-m | 輸出虛擬機進程啓動時傳遞給主類main()函數的參數 |
-l | 輸出主類的全名,若是進程執行的是Jar包,輸出Jar路勁 |
-v | 輸出虛擬機啓動時 JVM參數 |
JVM statistics Monitoring Tool
虛擬機統計信息監視工具
jstat是用於監視虛擬機各類運行狀態信息的命令行工具。它能夠顯示本地或遠程虛擬機進程中的類裝載,內存,垃圾收集,JIT編譯等運行時數據,在沒有GUI圖形界面,只提供了純文本控制檯環境的服務器上,它將是運行期定位虛擬機性能問題的首選工具。工具
* jstat 命令格式: *性能
jstat [ option vmid [intervals[s|m] [count]] ]
spa
若是是本地虛擬機 vmid 則與LVMID是一致的
插件
若是是遠程虛擬機 那vmid的格式應該爲 [protocol:]//LVMID[@hostname[:port]/servername]
eg: interval 和 count表明查詢間隔和次數,若是省略這兩個參數,說明只查一次。
選項 | 做用 |
---|---|
-class | 監視類裝載,卸載數量,總空間及類裝載所耗費的時間 |
-gc | 監視java堆情況,包括Eden區,2個survivor區,老年代,永久代等容量,已用空間,GC時間合計等信息 |
-gccapacity | 監視內容與-gc基本相同,主要關注Java堆各個區域使用到的最大和最小空間 |
-gcutil | 監視內容與-gc基本相同,主要關注已使用空間佔總空間的百分比 |
-gccause | 與-gcutil功能同樣,會額外輸出致使上一次GC產生的緣由 |
-gcnew | 監視新生代GC的情況 |
-gcnewcapacity | 監視內容與-gcnew基本相同,主要用到的最大和最小空間 |
-gcold | 監視老年代GC的情況 |
-gcoldcapacity | 監視內容與-gcold基本相同,主要用到的最大和最小空間 |
-gcpermcapacity | 輸出永久代使用到的最大和最小空間 |
-compiler | 輸出JIT編譯器編譯過的方法,耗時等信息 |
-printcompilation | 輸出已經被JIT編譯的方法 |
統計的參數詳解
S0C — Heap上的 Survivor space 0 區總量
S1C — Heap上的 Survivor space 1 區總量
S0U — Heap上的 Survivor space 0 區已使用的百分比
S1U — Heap上的 Survivor space 1 區已使用的百分比
EC — Heap上的 Eden space 區總量
EU — Heap上的 Eden space 區已使用空間的百分比
OC — Heap上的 Old space 區總量
OU — Heap上的 Old space 區已使用空間的百分比
PC — Perm space 區總量
PU — Perm space 區已使用空間的百分比
YGC — 從應用程序啓動到採樣時發生 Young GC 的次數
YGCT– 從應用程序啓動到採樣時 Young GC 所用的時間(單位秒)
FGC — 從應用程序啓動到採樣時發生 Full GC 的次數
FGCT– 從應用程序啓動到採樣時 Full GC 所用的時間(單位秒)
GCT — 從應用程序啓動到採樣時用於垃圾回收的總時間(單位秒)
Java Configuration Info
Java配置信息工具
jinfo的做用是實時地查看和調整虛擬機的各項參數。
這個命令原先只在Linux上提供,在JDK1.6以後 windows平臺上也有了,可是在windows平臺上jinfo命令有較大的限制只提供最基本的 -flag 選項
* jinfo 命令格式: *
jinfo [option] pid
選項 | 做用 |
---|---|
-sysprops | 輸出System.getProperties()內容 |
-flag name | 打印指定參數值 |
-flag [+ | -]name 或者 -flag name=value |
Java Memory Map
Java 內存映像工具
jmap命令用於生成堆快照(heapdump或dump文件)。不只如此,jmap還能夠查詢finalize執行隊列 堆和永久代的詳細信息。
和jinfo同樣,jmap不少功能在windows平臺上受限制
* jmap 命令格式: *
jmap [option] vmid
選項 | 做用 |
---|---|
-dump | 生成java堆轉出快照。格式爲:-dump:format=b,file=<filename> |
-histo | 顯示堆中對象的統計信息,包括類,實例數量和合計容量 |
-finalizerinfo | 顯示在F-Queue中等待Finalizer線程執行finalize方法的對象,只在Linux/Solaris平臺下有效 |
-heap | 顯示java堆詳細信息 |
-permstat | 以ClassLoader爲統計口徑顯示永久代內存狀態,只在Linux/Solaris平臺下有效 |
-F | 當-dump選項沒有響應時,強制生成dump快照,只在Linux/Solaris平臺下有效 |
Java Heap Analysis Tool
虛擬機堆轉儲快照分析工具
jhap與jmap搭配使用用來分析 jmap生成的快照文件。jhap內置一個微型的HTTP/HTML服務器
生成dump文件分析結果後,能夠在瀏覽器中查看http://localhost:7000
JVM Strack Trace
Java 堆棧跟蹤工具
jstack的功能用於生成虛擬機當前時刻的線程快照(通常稱爲threaddump或javacore文件)。
線程快照就是當前虛擬機內每一條線程正在執行方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的緣由,如線程死鎖,死循環,請求外部資源等。
* jstack 命令格式: *
jstack [option] vmid
選項 | 做用 |
---|---|
-F | 當正常輸出的請求不被響應時,強制輸出線程堆棧 |
-m | 若是調用到本地方法,能夠顯示C/C++的堆棧 |
-l | 除堆棧外,顯示關於鎖的附加信息 |
Java Monitoring and Management Console
Jconsole 是一款基於JMX的可視化監視和管理工具。部分功能針對於JMX MBean進行管理。
JConsole 位於 bin/jConsole.exe
JConsole 其實 是 命令行工具的一種整合,裏面的標籤頁對應的是JDK的命令行工具 如 Memory標籤頁: 至關於 jstat命令
All-in-One Java Troubleshooting Tool
多合一故障處理工具
隨着JDK發佈的功能最強大的運行監視和故障處理程序。從JDK1.6 update 7開始 已經做爲官方故障處理工具加入到 bin\jvisualvm.exe
VisualVM 是基於NetBeans 平臺發開的,所以它一開始就具有了插件擴展功能的特性