主要學習並記錄在命令行中操做服務器時使用的六大命令工具,可視化工具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命令可獲取命令說明,若是能記住並熟練的使用,能夠提升排查問題的效率,故在這裏手動的敲一遍,加深印象。