《深刻理解Java虛擬機》筆記--第四章、虛擬機性能監控與故障處理工具

主要學習並記錄在命令行中操做服務器時使用的六大命令工具,可視化工具JConsole和VisualVM在開發過程當中熟悉。
1、jps:虛擬機進程情況工具(JVM Process Status Tool)
    列出正在運行的虛擬機進程,並顯示虛擬機執行主類的名稱和這些進程的本地虛擬機惟一ID(LVMID)。
    快速定位到某個虛擬機進程。
    jps命令格式:
        jps [options] [hostid]
    Options:
        -q    只輸出LVMID,省略主類的名稱;
        -m    輸出虛擬機進程啓動時傳遞給主類Main()函數的參數;
        -l    輸出主類的全名,若是進程執行的是jar包,輸出jar路徑;
        -v    輸出虛擬機進程啓動時JVM參數;
    HostId:
        經過RMI協議查詢開啓了RMI服務的遠程虛擬機進程狀態。
        jps 192.168.8.7 //查看遠程計算機192.168.8.7的狀況(默認1099端口)
        jps rmi://192.168.8.7:8888 //查看遠程計算機192.168.8.7 8888端口 
 
2、jstat:虛擬機統計信息監視工具(JVM Statistics Monitoring Tool)
    監視虛擬機各類運行狀態信息,顯示本地或遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據。
    jstat命令格式:
        jstat [option vmid [ interval [s|ms] [count] ] ]
    Options:
        -class    監視類裝載、卸載數量、總空間及類裝載所耗費的時間;
        -gc    監視Java堆狀態,包括Eden區(E)、2個Survivor區(S0,S1)、老年代(O)、永久代(P)等的容量、已用空間、GC時間合計等信息;
        -gccapacity    監視內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大和最小空間;
        -gcutil     監視內容與-gc基本相同,但輸出主要關注已使用空間佔總空間的百分比;
        -gccause    與-gcutil功能同樣,可是會額外輸出致使上一次gc產生的緣由;
        -gcnew    監視新生代gc的情況;
        -gcnewcapacity    監視內容與-gcnew基本相同,輸出主要關注使用到的最大和最小空間;
        -gcold    監視老年代gc的情況;
        -gcoldcapacity    監視內容與-gcold基本相同,輸出主要關注使用到的最大和最小空間;
        -gcpermcapacity    輸出永久代使用到的最大和最小空間;
        -compiler    輸出JIT編譯器編譯過的方法、耗時等信息;
        -printcompilation    輸出已經被JIT編譯的方法;
 
3、jinfo:Java配置信息工具(Configuration Info for Java)
    實時查看和調整虛擬機的各項參數。
    使用-flag [+/-]name或 -flag name=value修改一部分運行時可寫的虛擬機參數。
    jinfo命令格式:
        jinfo [option] pid
    Options:
        -flag name    輸出指定name的JVM參數;
        -flag [+|-]name    啓用或禁用指定name的JVM參數;
        -flag name=value    設置指定name的JVM參數;
        -flags    打印傳遞給JVM命令行標誌;
        -sysprops    打印Java系統屬性鍵值對;
4、jmap:Java內存映像工具(Memory Map for Java)
    可用於生成堆轉儲快照,查詢finalize執行隊列,Java堆和永久代的詳細信息等。
    jmap命令格式:
        jmap [option] vmid
    Options:
        -dump    生成Java堆轉儲快照;
        -finalizerinfo    顯示在F-Queue中等待Finalizer線程執行finalize方法的對象;
        -heap    顯示Java堆詳細信息,如使用哪一種回收器、參數配置、分代情況等;
        -histo    顯示堆中對象統計信息,包括類、實例數量和合計容量;
        -permstat    以ClassLoader爲統計口徑顯示永久代內存狀態;
        -F    當虛擬機進程對-dump選項沒有響應時,可使用這個選項強制生成dump快照;
5、jhat:虛擬機堆轉儲快照分析工具(JVM Heap Analysis Tool)
    與jmap命令搭配使用,來分析堆轉儲快照。
    如非必要,不要生產環境分析堆轉儲快照,建議將dump文件拷貝出來使用Eclipse Memory Analysis(mat)工具分析。
    jhat命令格式:
        jhat [ options ] <heap-dump-file>
6、jstack:Java堆棧跟蹤工具(Stack Trace for Java)
    用於生成虛擬機當前時刻的線程快照,定位線程出現長時間停頓的緣由。
    jstack命令格式:
        jstack [option] vmid
    Options:
        -F    當正常輸出的請求不被響應時,強制輸出線程堆棧;
        -l    除堆棧外,顯示關於鎖的附加信息;
        -m    若是調用到本地方法的話,能夠顯示C/C++的堆棧;
小結:這六大命令在排查線上問題時頗有用,不用死記硬背,平時用的時候,用man命令可獲取命令說明,若是能記住並熟練的使用,能夠提升排查問題的效率,故在這裏手動的敲一遍,加深印象。
相關文章
相關標籤/搜索