理解JVM(三):JVM命令工具

jps(JVM Process Status Tool)

虛擬機進程情況工具,能夠列出正在運行的虛擬機進程,並顯示虛擬機執行主類(MainClass,main()函數所在的類)名稱以及這些進程的本地虛擬機惟一ID(Local Virtual Machine Identifier,LVMID)。java

  • 命令格式:jps[options][hostid]
  • 參數:
    • -q:只輸出LVMID,省略主類名稱
    • -m:輸出虛擬機進程啓動時傳給主類main()函數的參數
    • -l:輸出主類全名,若是進程執行的時jar包則輸出jar路徑
    • -v:輸出虛擬機進程啓動時的jvm參數

jstat(JVM Statistics Monitoring Tool)

虛擬機統計信息監視工具,用於監視虛擬機各類運行狀態信息的命令行工具。它能夠顯示本地或者遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據,在沒有GUI圖形界面,只提供了純文本控制檯環境的服務器上,它將是運行期定位虛擬機性能問題的首選工具。瀏覽器

  • 命令格式:jstat[option vmid[interval[s|ms][count]]]
  • 對於命令格式中的VMID與LVMID須要特別說明一下:若是是本地虛擬機進程,VMID與LVMID是一致的;若是是遠程虛擬機進程,那VMID的格式應當是:[protocol:][//]lvmid[@hostname[:port]/servername]
  • 參數interval和count表明查詢間隔和次數,若是省略這兩個參數,說明只查詢一次。
// 每250毫秒查詢一次進程2764垃圾收集情況,一共查詢20次
jstat-gc 2764 250 20
複製代碼
  • 參數:主要分爲3類:類裝載、垃圾收集、運行 期編譯情況
    • -class:監視類裝載、卸載數量、總空間和類裝載消耗的時間
    • -gc:監視java堆情況,包括Eden區、2個Survivor區、老年代、永久代等的容量,已用空間,GC時間合計等信息
    • -gccapacity: 監視內容與-gc相同,但輸出主要關注Java堆各個區域使用到的最大、最小空間
    • -gcutil:監視內容與-gc相同,但輸出主要關注已使用空間佔總空間的百分百
    • -gccause:與-gcutil同樣,但會額外輸出上一次GC產生的緣由
    • -gcnew:監視新生代GC的情況
    • -gcnewcapacity:監視內容與-gcnew相同,輸出主要關注使用到的最大、最小空間
    • -gcold:監視老年代GC的情況
    • -gcoldcapacity:監視內容與-gcold相同,輸出主要關注使用到的最大、最小空間
    • -gcpermcapacity:輸出永久代使用到的最大、最小空間
    • -compiler:輸出JIT編譯過的方法、耗時等信息
    • -printcompilation:輸出已被JIT編譯的方法

jinfo(Configuration Info for Java)

Java配置信息工具,可實時查看和調整虛擬機各項參數。bash

  • 命令格式:jinfo[option]pid
  • 參數:
    • -flag:輸出指定args參數的值
    • -flags:不須要args參數,輸出全部JVM參數的值
    • -sysprops:輸出系統屬性,等同於System.getProperties()

jmap(Memory Map for Java)

Java內存映像工具用於生成堆轉儲快照(dump文件)服務器

  • 幾種得到dump文件的方式
    • jmap命令
    • -XX:+HeapDumpOnOutOfMemoryError參數,可讓虛擬機在OOM異常出現以後自動生成dump文件
    • -XX:+HeapDumpOnCtrlBreak參數則可使用[Ctrl]+[Break]鍵讓虛擬機生成dump文件
    • 在Linux系統下經過Kill-3命令發送進程退出信號也能拿到dump文件
  • 命令格式:jmap[option]vmid
  • 參數:
    • -dump:生成堆轉儲快照
    • -finalizerinfo:顯示在F-Queue隊列等待Finalizer線程執行finalizer方法的對象
    • -heap:顯示Java堆詳細信息
    • -histo:顯示堆中對象的統計信息
    • -permstat:以CLassLoader爲統計口徑顯示永久代內存狀態
    • -F:當-dump沒有響應時,強制生成dump快照

jhat(JVM Heap Analysis Tool)

與jmap搭配使用,用來分析jmap生成的堆轉儲快照。jhat內置了一個微型的HTTP/HTML服務器,生成dump文件的分析結果後,能夠在瀏覽器中查看。jvm

  • 命令格式:jhat [dumpfile]
  • 不推薦使用此命令,有2個緣由:
    • 通常不會直接在服務器上分析dump文件,浪費服務器資源。
    • 分析功能簡陋,推薦用專業的可視化分析工具,好比VisualVM

jstack(Stack Trace for Java)

Java堆棧跟蹤工具,用於生成虛擬機當前時刻的線程快照。函數

線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的緣由,如線程間死鎖、死循環、請求外部資源致使的長時間等待等都是致使線程長時間停頓的常見緣由。工具

線程出現停頓的時候經過jstack來查看各個線程的調用堆棧,就能夠知道沒有響應的線程到底在後臺作些什麼事情,或者等待着什麼資源。性能

  • 命令格式:jstack[option]vmid
  • 參數:
    • -F:當正常輸出的請求不被響應時,強制輸出線程堆棧
    • -l:除堆棧外,顯示關於鎖的附加信息
    • -m:若是調用本地方法,可顯示C/C++的堆棧
  • 在JDK 1.5中,java.lang.Thread類新增了一個getAllStackTraces()方法用於獲取虛擬機中全部線程的StackTraceElement對象。
相關文章
相關標籤/搜索