VisualVM——JDK自帶的性能分析工具


引子

這段時間項目新版本要發了,所以跟着QA分析性能測試和壓力測試,用了平時不怎麼用的很多工具:

  • jmap :idea:
    jmap -heap pid → 查看堆的使用狀況信息
    jmap -histo:live pid | less → 堆中活動的對象以及大小
    jmap -dump:format=b,file=eclipse_heap.bin pid → Dump堆信息
  • jstat,可以查看很多內容 :idea:
    jstat -gcutil  -h 20 pid  1000 100 → 查看Java進程GC的情況,1000ms統計一次gc情況統計100次
  • jstack,查看jvm線程運行狀態,是否有死鎖現象等等信息
    jstack pid → Dump線程信息
  • jinfo,查看jvm配置信息
  • jps
  • jconsole,圖形界面。可以持續收集內存、線程信息,並以曲線的方式顯示出來。
    # 這個工具真正要做的功能是查看JMX Bean的信息,性能分析中並不關心JMX信息。
  • mat :idea: ,分析內存Dump,查找內存泄漏。http://www.eclipse.org/mat/
  • JProfiler,商業 :evil: Profile工具。查看內存、CPU的使用,強勁

 

VisualVM在JDK1.6 Update7之後的版本中推出,就放在bin目錄下面。

VisualVM在的官方網站在 https://visualvm.dev.java.net 。JDK1.6 Update7之前的版本可以單獨下載使用。

VisualVM使用簡單,幾乎0配置,功能還是比較豐富的,幾乎囊括了其它JDK自帶命令的所有功能。

  • 內存信息
  • 線程信息
  • Dump堆(本地進程)
  • Dump線程(本地進程)
  • 打開堆Dump。堆Dump可以用jmap來生成。
  • 打開線程Dump
  • 生成應用快照(包含內存信息、線程信息等等)
  • 性能分析。 :idea: CPU分析(各個方法調用時間),內存分析(各類對象佔用的內存)
  • ……

 

PS:

跟着QA做性能測試和壓力測試,很多收穫和感觸。

  1. 雖然有UI工具,尤其是商業的工具如JProfiler,功能異常強大,但是命令行工具還是非常有市場的。
    • 線上出問題時,命令行能方便和快速的Dump出Heap信息線程信息,然後再對Dump分析;或是JVM信息,如GC次數、JVM參數。命令行對目標的產生的壓力小,UI工具可能無法連上。
    • JDK自帶命令行是環境標配的,你總是可以使用。UI可能要安裝,等裝好,菜都涼了。
  2. 往往是對工具的不瞭解纔不能解決問題,JDK自帶的工具已經可以解決很多問題了。強大的商業工具往往只是增加學習難度。
  3. 只有測試得出的結果纔是可信的,之前的推測往往不可靠的。
  4. 系統地收集和保證數據,這樣當發現問題時,就有更可以用作判斷的信息。

 

參考資料:


發佈了0 篇原創文章 · 獲贊 1 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章