1. 程式人生 > 其它 >JVM 常見命令列監控工具

JVM 常見命令列監控工具

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,代表只打印指定次數

3. jinfo:檢視虛擬機器配置引數資訊,也可用於調整虛擬機器引數配置

  • 語法:jinfo [option] <pid>
    • option:檢視或修改 jvm 引數,系統屬性資訊,注意只能修改被標記為 manageable 的引數
      • no option 輸出全部引數和系統屬性
      • -flag name:輸出對應名稱的參
      • -flag [+-]name:開啟或關閉對應名稱和引數
      • -flag name=value:設定對應名稱的引數
      • -flags:輸出全部引數
      • -sysprops:輸出系統屬性

4. jmap:匯出記憶體映像檔案和記憶體使用情況

  • 語法:jmap [option] <pid>
    • option:
      • -dump:生成 dump 檔案
      • -heap:輸出整個堆空間詳細資訊,包括 GC 使用,堆配置資訊,以及記憶體使用情況
      • -histo:輸出對重物件統計資訊,包括類、例項數量和合計容量

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