最近在做性能測試,在性能調優過程中查閱了些虛擬機相關的知識,下面對虛擬機所用的性能監控的工具做個簡單的介紹和匯總。
一、JDK命令行工具
1.jps:虛擬機進程狀況工具
列出正在運行的虛擬機進程,顯示虛擬機執行祝列的名稱,已經這些進程的本地虛擬機的唯一ID。此命令雖然功能單一,但它是使用頻率最高的JDK命令工具。
Jps 命令格式:
jps [options] [hostid]
2. jstat:虛擬機統計信息監視工具
jstat(JVM Statistics Monitoring Tool)是用于監視虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據。在沒有GUI圖形界面,只提供了純文本控制臺環境服務器上,它將是運行期定位虛擬機性能問題的首選工具。
jstat命令格式:
jstat [option vmid [ interval [s|ms] [count] ] ]
參數interval和count代表查詢的間隔和次數,如果省略這兩個參數,說明只查詢一次。
例如:jstat –gc 3232 500 20
命令含義為:每500ms查詢一次進行3232垃圾收集器的狀況,一共查詢20次。
選項option代表用戶希望查詢虛擬機信息,主要分為3類;類裝載、垃圾收集和運行期編譯狀況。
3. jinfo:Java配置信息工具
jinfo(Configuration Info for Java)實時查看和調整虛擬機的各項參數。想知道未被顯示指定的參數的系統默認值,可以使用jinfo的-flag選項進行查詢,jinfo還可以使用-sysprops選項把虛擬機進行的System.getProperties()的內容打印出來。
jinfo命令格式:
jinfo [option] pid
4.jmap:Java內存映像工具
jmap(Memory Map for Java)于生成堆轉儲快照,查詢finalize執行隊列,Java堆和永久代的詳細信息等。
jmap命令格式:
jmap [option] vmid
5.jstack:Java堆棧跟蹤工具
jstack(Stack Trace for Java)用于生成虛擬機當前時刻的線程快照,定位線程出現長時間停頓的原因。
jstack命令格式:
jstack [option] vmid
二、 JDK可視化工具
1. Jconsole:java監視與管理控制臺
JConsole可以說是前面介紹的所有功能性JDK工具的一個可視化版本,幾乎實現了JVM Manage API中提供的所有的功能。
通過JDK/bin目錄下的“jconsole.exe”啟動JConsole。如圖1,雙擊其中一個進程即可開始監控,也可以使用“遠程進程”功能來連接遠程服務器,對遠程虛擬機進行監控。
圖1

圖2
1)圖2“概述”頁顯示整個虛擬機主要運行數據的概覽。
2)內存監控
“內存”頁簽相當于可視化的jstat命令,用于監視收集器管理的虛擬機內存(java堆和永久代)的變化趨勢。
3)線程監控
“線程”頁簽的功能相當于可視化的jstack命令,遇到線程停頓的時候可以時候線程監控進行分析
2.VisualVM:多合一故障處理工具
VisualVM它除了運行監視、故障處理外,還提供了很多其他方面的功能。如性能分析(profiling),VisualVM的性能分析功能甚至比起JProfiler專業且收費工具都不會遜色多少,而且VisualVM還有一個很大的優點:不需要被監視的程序基于特殊的Agent運行,因此它對應用程序的實際性能影響很小,使得他可以直接應用在生產環境中。
1)啟動VisualVM
通過JDK/bin目錄下的“jvisualvm”啟動VisualVM,可以根據需要給VisualVM裝擴展插件,點擊“工具”-->“插件”菜單。
2)生成和瀏覽堆轉儲快照
可以通過以下2種方式生成:
在“應用程序”窗口中右鍵單機應用程序節點,然后選擇“堆dump”;
在“應用程序”窗口雙擊應用晨曦節點打開應用程序標簽,然后再“監視”標簽中單擊“堆dump”。
生成了dump文件之后,應用程序頁簽將在堆的應用程序下增加以[heapdump]開頭的子節點,并在主頁簽中打開該轉儲快照,如圖3。

“摘要”面板可以看到應用程序dump時運行的參數、線程堆棧等信息。
“類”面板以類為統計口徑統計的類的實例數量和容量信息。
“實例”面板需要通過“類”面板進去,在“類”中選擇關系的類后點擊,即可在實例中查看此類的實例信息。
3)分析程序性能
在Profiler頁簽中,提供了程序運行期間方法級的CPU執行時間分析及內存煩心,進行profiling肯定會對程序運行性能有比較大的影響,所以一般不在生產環境中使用這項功能。
選擇“cpu”或“內存”,VisualVM會記錄這段時間中應用程序執行過的方法。Cpu分析會統計每個方法執行的次數、執行耗時。分詞分析則會統計每個方法關聯對象數及這些對象所占用的空間,如圖4。

圖4