JVM 常見命令列監控工具
阿新 • • 發佈:2021-08-01
1. jps:檢視正在執行的 java 程序
- 語法:jps [-q] [-mlvV] [<hostid>]
- -q:僅僅顯示LVMID,既本地虛擬機器i唯一id,不顯示主類名稱
- -l:輸出應用程式主類的全類名,如果程序執行的是 jar 包,則輸出jar 包完整路徑
- -m:輸出虛擬機器程序啟動時傳遞給主類 main() 的引數
- -v:列出虛擬機器程序啟動時的 JVM 引數。比如 -Xms20m -Xmx50m 是啟動程式指定的 JVM 引數
- hostid:hostname:port,主機名:埠號,遠端連線,需要安裝 jstatd
2.jstat:檢視 JVM 統計資訊
- 語法:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
- -<option>
- -class:檢視所有載入的型別的數量,佔用記憶體,解除安裝的型別數量,解除安裝的型別佔用記憶體,花費的總體時間
- -compiler:檢視 JIT 編譯數量,失敗數量,無效數量,編譯總耗時,失敗型別,失敗方法
- -gc:顯示與 GC 相關的堆資訊,包括 Eden 區、兩個 Survivor 區,老年代,方法區等的容量,已用空間,GC 時間合計等資訊
- -gccapacity:除 -gc 顯示的內容外,還包括各個區域使用到的最大、最小空間
- -gcutil:除 -gc 顯示的內容外,還輸出已使用空間佔總空間的百分比
- -gccause:除 -gcutil 顯示的內容外,額外輸出導致最後一次或當前正在發生的 GC 產生的原因
- -t:程式執行的總時間
- interval:週期性每隔 interval 毫秒列印一次 jstat 資訊,如:jstat -class 11111 1000,每隔1 秒列印一次 jstat 資訊
- count:搭配 interval,代表只打印指定次數
- -<option>
3. jinfo:檢視虛擬機器配置引數資訊,也可用於調整虛擬機器引數配置
- 語法:jinfo [option] <pid>
- option:檢視或修改 jvm 引數,系統屬性資訊,注意只能修改被標記為 manageable 的引數
- no option 輸出全部引數和系統屬性
- -flag name:輸出對應名稱的參
- -flag [+-]name:開啟或關閉對應名稱和引數
- -flag name=value:設定對應名稱的引數
- -flags:輸出全部引數
- -sysprops:輸出系統屬性
- option:檢視或修改 jvm 引數,系統屬性資訊,注意只能修改被標記為 manageable 的引數
4. jmap:匯出記憶體映像檔案和記憶體使用情況
- 語法:jmap [option] <pid>
- option:
- -dump:生成 dump 檔案
- -heap:輸出整個堆空間詳細資訊,包括 GC 使用,堆配置資訊,以及記憶體使用情況
- -histo:輸出對重物件統計資訊,包括類、例項數量和合計容量
- option:
5. jstack:輸出 JVM 中執行緒快照
- 語法:jstack [option] <pid>
- option:
- -F:當正常輸出的請求不被響應時,強制輸出執行緒堆疊
- -m:如果呼叫到本地方法的話,可以顯示 C/C++ 的堆疊
- -l:除堆疊外,顯示關於鎖的附加資訊
- 在 thread dump 中,留意以下幾種狀態
- 死鎖,Deadlock(重點關注)
- 等待資源,waiting on condition (重點關注)
- 等待獲取監視器,waiting on monitor entry (重點關注)
- 阻塞,Blocked (重點關注)
- 執行中, Runnable
- 暫停,Suspended
- 物件等待中,Object.wait() 或 TIMED_WAITING
- 停止,Parked