內存管理機制-性能監控與故障處理工具

 

       性能監控與調優的工具主要分爲 命令行工具和圖形化界面工具java

 

RoadMap

 

1. 命令行工具

JDK中的bin目錄下「贈送」了不少體積小(幾十KB) 且功能強大的虛擬機監控和故障處理工具。 
這些工具體積小的主要緣由並不是是 JDK開發團隊刻意精煉所致,而是這些工具自己是對 tools.jar類庫的一層簡單包裝,工具主要功能的實現代碼都在tools.jar中。若是是Linux版本的JDK,這些工具甚至是有shell編寫而成。shell

須要注意的是,有些工具是基於JMX工做的,在JDK1.5和之前的版本須要添加參數 -Dcom.sun.management.jmxremote 開啓JMX管理功能。而在JDK1.6以後的版本中,JMX是默認開啓的,無需添加參數windows

1.1 jps

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參數

1.2 jstat

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編譯的方法

 

統計的參數詳解

  1. S0C — Heap上的 Survivor space 0 區總量
  2. S1C — Heap上的 Survivor space 1 區總量
  3. S0U — Heap上的 Survivor space 0 區已使用的百分比
  4. S1U — Heap上的 Survivor space 1 區已使用的百分比
  5. EC — Heap上的 Eden space 區總量
  6. EU — Heap上的 Eden space 區已使用空間的百分比
  7. OC — Heap上的 Old space 區總量
  8. OU — Heap上的 Old space 區已使用空間的百分比
  9. PC — Perm space 區總量
  10. PU — Perm space 區已使用空間的百分比
  11. YGC — 從應用程序啓動到採樣時發生 Young GC 的次數
  12. YGCT– 從應用程序啓動到採樣時 Young GC 所用的時間(單位秒)
  13. FGC — 從應用程序啓動到採樣時發生 Full GC 的次數
  14. FGCT– 從應用程序啓動到採樣時 Full GC 所用的時間(單位秒)
  15. GCT — 從應用程序啓動到採樣時用於垃圾回收的總時間(單位秒)

1.3 jinfo

Java Configuration Info 
Java配置信息工具 
jinfo的做用是實時地查看和調整虛擬機的各項參數。 
這個命令原先只在Linux上提供,在JDK1.6以後 windows平臺上也有了,可是在windows平臺上jinfo命令有較大的限制只提供最基本的 -flag 選項

* jinfo 命令格式: *

  1. jinfo [option] pid
選項 做用
-sysprops 輸出System.getProperties()內容
-flag name 打印指定參數值
-flag [+ -]name 或者 -flag name=value

1.4 jmap

Java Memory Map 
Java 內存映像工具 
jmap命令用於生成堆快照(heapdump或dump文件)。不只如此,jmap還能夠查詢finalize執行隊列 堆和永久代的詳細信息。 
和jinfo同樣,jmap不少功能在windows平臺上受限制

* jmap 命令格式: *

  1. 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平臺下有效

1.5 jhat

Java Heap Analysis Tool 
虛擬機堆轉儲快照分析工具 
jhap與jmap搭配使用用來分析 jmap生成的快照文件。jhap內置一個微型的HTTP/HTML服務器 
生成dump文件分析結果後,能夠在瀏覽器中查看 http://localhost:7000 
 

1.6 jstack

JVM Strack Trace 
Java 堆棧跟蹤工具 
jstack的功能用於生成虛擬機當前時刻的線程快照(通常稱爲threaddump或javacore文件)。 
線程快照就是當前虛擬機內每一條線程正在執行方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的緣由,如線程死鎖,死循環,請求外部資源等。

* jstack 命令格式: *

  1. jstack [option] vmid
選項 做用
-F 當正常輸出的請求不被響應時,強制輸出線程堆棧
-m 若是調用到本地方法,能夠顯示C/C++的堆棧
-l 除堆棧外,顯示關於鎖的附加信息

2. 圖形化界面工具

2.1 JConsole

Java Monitoring and Management Console 
Jconsole 是一款基於JMX的可視化監視和管理工具。部分功能針對於JMX MBean進行管理。 
JConsole 位於 bin/jConsole.exe

JConsole 其實 是 命令行工具的一種整合,裏面的標籤頁對應的是JDK的命令行工具 如 Memory標籤頁: 至關於 jstat命令

 

2.2 VisutalVM

All-in-One Java Troubleshooting Tool 
多合一故障處理工具 
隨着JDK發佈的功能最強大的運行監視和故障處理程序。從JDK1.6 update 7開始 已經做爲官方故障處理工具加入到 bin\jvisualvm.exe

VisualVM 是基於NetBeans 平臺發開的,所以它一開始就具有了插件擴展功能的特性 
 

相關文章
相關標籤/搜索