JVM 常用排查命令工具

JVM (三) 常用排查命令工具

  • jps 虛擬機進程狀況工具

    jps(JVM Process Status Tool)它的功能也和ps命令類似:可以列出正在運行的虛擬機進 程,並顯示虛擬機執行主類(Main Class,main()函數所在的類)名稱以及這些進程的本地虛擬機唯一 ID(LVMID,Local Virtual Machine Identifier)。

    命令格式
    jps [ options ] [ hostid ]
    列子

    ^Croot@yut5:~# jps -l
    30113 admin2.0.jar
    12488 sun.tools.jps.Jps
    30313 admin2.0.jar
    

    在這裏插入圖片描述

  • jinfo java配置信息工具

    jinfo(Configuration Info for Java)的作用是實時查看和調整虛擬機各項參數。
    可以使用-flag[+|-]name或者-flag name=value在運行期修改一部分運行期可寫的 虛擬機參數值
    命令格式
    jinfo [ option ] pid
    例子
    查詢最大堆大小 502m 和 線程棧內存爲 1m

    root@yut5:~# jinfo -flag MaxHeapSize 30113
    -XX:MaxHeapSize=526385152
    root@yut5:~# jinfo -flag ThreadStackSize 30113
    -XX:ThreadStackSize=1024
    

    jinfo -flags 30113 可以查看應用下的vm配置。

  • jmap:Java內存映像工具

    jmap(Memory Map for Java)命令用於生成堆轉儲快照(一般稱爲heapdump或dump文件)。
    jmap的作用並不僅僅是爲了獲取堆轉儲快照,它還可以查詢finalize執行隊列、Java堆和方法區的 詳細信息,如空間使用率、當前用的是哪種收集器等。

    命令格式
    jmap [ option ] vmid
    例子
    查看堆信息

    root@yut5:~# jmap -heap 30113
    Attaching to process ID 30113, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.242-b08
    using thread-local object allocation.
    Mark Sweep Compact GC
    Heap Configuration:
       MinHeapFreeRatio         = 40
       MaxHeapFreeRatio         = 70
       MaxHeapSize              = 526385152 (502.0MB)
       NewSize                  = 11141120 (10.625MB)
       MaxNewSize               = 175439872 (167.3125MB)
       OldSize                  = 22413312 (21.375MB)
       NewRatio                 = 2
       SurvivorRatio            = 8
       MetaspaceSize            = 21807104 (20.796875MB)
       CompressedClassSpaceSize = 1073741824 (1024.0MB)
       MaxMetaspaceSize         = 17592186044415 MB
       G1HeapRegionSize         = 0 (0.0MB)
    

    在這裏插入圖片描述

  • jstack:Java堆棧跟蹤工具

    jstack(Stack Trace for Java)命令用於生成虛擬機當前時刻的線程快照(一般稱爲threaddump或者 javacore文件)。線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的 目的通常是定位線程出現長時間停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間掛 起等,都是導致線程長時間停頓的常見原因。線程出現停頓時通過jstack來查看各個線程的調用堆棧, 就可以獲知沒有響應的線程到底在後臺做些什麼事情,或者等待着什麼資源。
    命令格式
    jstack [ option ] vmid
    例子
    太多隻粘貼一部分

     jstack -l 30113
    2020-05-14 16:44:18
    Full thread dump OpenJDK 64-Bit Server VM (25.242-b08 mixed mode):
    "Attach Listener" #42 daemon prio=9 os_prio=0 tid=0x00007f1b20004000 nid=0x6da6 waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
       Locked ownable synchronizers:
            - None
    "DestroyJavaVM" #41 prio=5 os_prio=0 tid=0x00007f1b4800a800 nid=0x75a2 waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
       Locked ownable synchronizers:
            - None
    

    從JDK 5起,java.lang.Thread類新增了一個getAllStackTraces()方法用於獲取虛擬機中所有線程的 StackTraceElement對象。使用這個方法可以通過簡單的幾行代碼完成jstack的大部分功能,在實際項目 中不妨調用這個方法做個管理員頁面,可以隨時使用瀏覽器來查看線程堆棧,

  • jstat:虛擬機統計信息監視工具

    jstat(JVM Statistics Monitoring Tool)是用於監視虛擬機各種運行狀態信息的命令行工具。它可 以顯示本地或者遠程[1]虛擬機進程中的類加載、內存、垃圾收集、即時編譯等運行時數據,在沒有 GUI圖形界面、只提供了純文本控制檯環境的服務器上,它將是運行期定位虛擬機性能問題的常用工 具。

  • jhat:虛擬機堆轉儲快照分析工具

    JDK提供jhat(JVM Heap Analysis Tool)命令與jmap搭配使用,來分析jmap生成的堆轉儲快照。 jhat內置了一個微型的HTTP/Web服務器,生成堆轉儲快照的分析結果後,可以在瀏覽器中查看。不過 實事求是地說,在實際工作中,除非手上真的沒有別的工具可用,否則多數人是不會直接使用jhat命令 來分析堆轉儲快照文件的,主要原因有兩個方面。一是一般不會在部署應用程序的服務器上直接分析 堆轉儲快照,即使可以這樣做,也會盡量將堆轉儲快照文件複製到其他機器[1]上進行分析,因爲分析 工作是一個耗時而且極爲耗費硬件資源的過程,既然都要在其他機器上進行,就沒有必要再受命令行 工具的限制了。另外一個原因是jhat的分析功能相對來說比較簡陋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章