【軟件構造】第八章第二節 動態程序分析方法與工具

第八章第二節 動態程序分析方法與工具

Outline

  • Java性能調優工具:
    • jstat
    • jmap
    • jhat
    • Vistual VM
    • MAT
  • Memory dump
  • Stack trace

Notes

 ## Java性能調優工具

  • Jstat:獲取JVM的Heap使用和GC的性能統計數據,命令如-gcutil
  • Jmap:輸出內存中的對象分佈狀況  如:jmap -clstats
  • Jhat:導出heap dump,瀏覽/查詢其中的對象分佈狀況
  • jstack:獲取Java線程的stack trace 具體用途以下:
    • 定位線程出現長時間停頓的緣由,如多線程間死鎖、死循環、請求外部資源 致使的長時間等待等。
    • 線程出現停頓的時候經過jstack來查看各個線程的調用堆棧,就能夠知道沒 有響應的線程到底在後臺作什麼事情,或者等待什麼資源。
  • Visual VM:提供了一個可視化界面,用於查看Java應用程序在JVM上運行時的詳細信息,使用各類技術,包括jvmstat,JMX,Serviceability Agent(SA)和Attach API等
  • MAT:內存堆導出文件的分析工具,生成餅狀圖等,可以對問題發生時刻的系統內存狀態獲取一個總體印象,找到最有可能致使內存泄露的對象,進一步查看其是否有異常行爲。

 

## Memory Dump(堆轉儲文件)

轉自    爪哇堂的博客html

  正如Thread Dump文件記錄了當時JVM中線程運行的狀況同樣,Heap Dump記錄了JVM中堆內存運行的狀況,可以使用jmap或JConsole命令生成,jhat分析。java

【使用 jmap 命令生成】多線程

jmap 命令是JDK提供的用於生成堆內存信息的工具,能夠執行下面的命令生成Heap Dump:oracle

jmap -dump:live,format=b,file=heap-dump.bin <pid>

其中的pid是JVM進程的id,heap-dump.bin是生成的文件名稱,在執行命令的目錄下面。推薦此種方法。jvm

【使用JConsole生成】工具

 JConsole是JDK提供的一個基於GUI查看JVM系統信息的工具,既能夠管理本地的JVM,也能夠管理遠程的JVM,能夠經過下圖的 dumpHeap 按鈕生成 Heap Dump文件。性能

 

【使用jhat分析】spa

jhat 是JDK自帶的用於分析JVM Heap Dump文件的工具,使用下面的命令能夠將堆文件的分析結果以HTML網頁的形式進行展現:.net

jhat <heap-dump-file>

其中 heap-dump-file 是文件的路徑和文件名,能夠使用 -J-Xmx512m 參數設置命令的內存大小。執行成功以後顯示以下結果:線程

Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

這個時候訪問 http://localhost:7000/ 就能夠看到結果了。

 

## Stack Trace

  可以使用jstack查看,定位線程出現長時間停頓的緣由。

相關文章
相關標籤/搜索