JDK下虛擬機器效能監控以及故障分析工具
阿新 • • 發佈:2018-11-01
無論對於開發人員還是運維人員,給一個系統定位問題時,知識、經驗是關鍵基礎,資料是依據,工具是運用知識處理資料的手段。對於開發人員或運維人員,這裡的資料包括:執行日誌、異常日誌、GC日誌、堆轉儲快照等。適當的使用這些工具,會使我們能夠快速定位問題,提升解決問題的速度。
針對JAVA程式設計師來說,我們這裡所講的瞭解使用JDK命令列工具監控虛擬機器的效能,定位系統問題。
JDK命令列工具,則是指JAVA_HOME\bin下的*.exe檔案。除了常用的javac和java命令,還有很多我們曾未了解以及使用的命令,JDK更新版本時,bin目錄下命令列工具的數量和功能則在不知不覺中增多和增強。JDK1.6中bin內容:【並非全部,太多不完全截圖了】
我們再看看JDK1.7中的bin內容【並非全部,太多不完全截圖了】
大家有沒有發現,這些exe工具的大小,一般很小,差不多十幾K,其實,這些JDK\bin下的工具真正的實現是在JDK\lib\tool.jar中。開啟tool.jar,其中sun\tools目錄:【JDK1.7.0_65】
注:版本不同,也許裡面的內容也不同,大部分的工具在JDK1.5已經提供,在此,通過JDK1.6,以及JDK1.7給大家展示JDK命令列工具。
宣告:以下工具都是在Win7、JDK1.7.0_65(32位)基礎上操作的。
JDK\bin下分為很多工具,具體的彙總分類: http://docs.oracle.com/javase/7/docs/technotes/tools/
在此只介紹重要的虛擬機器監控以及故障處理工具。 Monitoring Tools:
其中引數意義:
-q:只輸出LVMID,省略主類的名稱
-m:輸出虛擬機器程序啟動時傳遞給主類main()函式的引數
-l:輸出主類的全名,如果程序執行的是jar包,輸出jar路徑
-v:輸出虛擬機器程序啟動時JVM引數
啟動tomca7,tomcat6,虛擬機器程序如下:
這樣就可以看出,兩個jvm程序,到底具體位置了,以及其中的啟動引數,根據引數可知,7800程序初始化堆大小8m,7608程序是新安裝的tomcat7,為了測試並沒有設定初始化引數,所以通過jps看不出其初始化引數。7108程序tomcat6的,初始化堆和最大堆大小都是1G。
上圖中的S、E等字母,在此簡單介紹一下,後面講GC演算法會具體介紹,其中S0、S1是指幸運區0、1;E是指伊甸區,這三區則稱為新生代;O代表老年區。P代表持久區;YGC新生代GC次數,YGCT新生代時間。FGC:老年代GC次數,老年代GC時間。GCT總共的GC時間。 jstat官網: http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html
Troubleshooting Tools
若你是64位vm,則需要指定 -J-d64引數【這個沒測,本機是32位】 宣告:沒有截完整,其中jps-v沒有顯示出的引數,通過jinfo可以檢視完整資訊。
jinfo官網: http://docs.oracle.com/javase/7/docs/technotes/tools/share/jinfo.html
jmap官網: http://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html
C:\Users\..>jstack Usage: jstack [-l] <pid> (to connect to running process) jstack -F [-m] [-l] <pid> (to connect to a hung process) jstack [-m] [-l] <executable> <core> (to connect to a core file) jstack [-m] [-l] [[email protected]]<remote server IP or hostname> (to connect to a remote debug server) Options: -F to force a thread dump. Use when jstack <pid> does not respond -m to print both java and native frames (mixed mode) -l long listing. Prints additional information about locks -h or -help to print this help message jstack官網: http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.html
上文只是常用的以及其重要用途,若想對每個瞭解更深,可以去官網針仔細看,上文已經給出每個命令的連線,方便大家進一步深造。 上文提到的jmap以及jhat,還有未曾提到視覺化分析工具jconsole、jvisualvm,我們下篇會根據示例講解。
JDK\bin下分為很多工具,具體的彙總分類: http://docs.oracle.com/javase/7/docs/technotes/tools/
在此只介紹重要的虛擬機器監控以及故障處理工具。 Monitoring Tools:
- jps:虛擬機器程序狀況工具
這樣就可以看出,兩個jvm程序,到底具體位置了,以及其中的啟動引數,根據引數可知,7800程序初始化堆大小8m,7608程序是新安裝的tomcat7,為了測試並沒有設定初始化引數,所以通過jps看不出其初始化引數。7108程序tomcat6的,初始化堆和最大堆大小都是1G。
- jstat:虛擬機器統計資訊監視工具
上圖中的S、E等字母,在此簡單介紹一下,後面講GC演算法會具體介紹,其中S0、S1是指幸運區0、1;E是指伊甸區,這三區則稱為新生代;O代表老年區。P代表持久區;YGC新生代GC次數,YGCT新生代時間。FGC:老年代GC次數,老年代GC時間。GCT總共的GC時間。 jstat官網: http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html
Troubleshooting Tools
- jinfo:Java配置資訊工具
若你是64位vm,則需要指定 -J-d64引數【這個沒測,本機是32位】 宣告:沒有截完整,其中jps-v沒有顯示出的引數,通過jinfo可以檢視完整資訊。
jinfo官網: http://docs.oracle.com/javase/7/docs/technotes/tools/share/jinfo.html
- jmap:Java記憶體映像工具
jmap官網: http://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html
- jhat:虛擬機器堆轉儲快照分析工具
- jstack:Java 堆疊跟蹤工具
C:\Users\..>jstack Usage: jstack [-l] <pid> (to connect to running process) jstack -F [-m] [-l] <pid> (to connect to a hung process) jstack [-m] [-l] <executable> <core> (to connect to a core file) jstack [-m] [-l] [[email protected]]<remote server IP or hostname> (to connect to a remote debug server) Options: -F to force a thread dump. Use when jstack <pid> does not respond -m to print both java and native frames (mixed mode) -l long listing. Prints additional information about locks -h or -help to print this help message jstack官網: http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.html
上文只是常用的以及其重要用途,若想對每個瞭解更深,可以去官網針仔細看,上文已經給出每個命令的連線,方便大家進一步深造。 上文提到的jmap以及jhat,還有未曾提到視覺化分析工具jconsole、jvisualvm,我們下篇會根據示例講解。