[JVM工具(1)] 堆棧檢查利器jstat的使用


jstat

  • 可以檢查 JVM 整體的運行情況,可以看到 新生代,老年代等的內存使用情況,以及GC 次數和耗時
  • 命令格式 如 jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
  • 其中 -option 必選參數表示命令參數 如 gc 等, -t 為可選參數表示是否打印時間(秒),-h<lines> 可選參數,表示每隔多少行打印頭部列表,如設置 -h 5 , 那么每五條記錄就會重新打印表頭,vmid 必選參數,Java 進程idinterval 可選參數表示采樣的時間間隔,count 可選參數表示需要采樣多少條,

jstat -gc pid

  • jstat -gc pid 這是最常用的語法,可以直接查看內存和垃圾回收情況
  • 首先我們要獲得Java 進程的 PID 信息,可以通過 jps 命令來獲取
  • 之后執行 jstat -gc pid 即可看到對應 Java 進程的內存情況,如下:

  • 這里說明一下關於這些列名的含義

    • S0C : 新生代中第一個 Survivor (即 From 區)的容量大小 (千字節)
    • S1C : 新生代中第二個 Survivor (即 To 區)的容量大小 (千字節)
    • S0U : 新生代 From Survivor 區已使用內存大小(千字節)
    • S1U : 新生代 To Survivor 區一使用內存大小(千字節)
    • EC : 新生代 Eden 區的容量大小(千字節)
    • EU : 新生代 Eden 區已使用內存大小(千字節)
    • OC : 老年代空間容量大小(千字節)
    • OU : 老年代已使用內存大小(千字節)
    • MC : 方法區的空間大小 (千字節)
    • MU : 方法區已使用的空間大小(千字節)
    • YGC : 從系統啟動到現在 Young GC/Minor GC 的次數
    • YGCT : Young GC 總耗時(秒)
    • FGC :從系統啟動到現在 Full GC 的次數
    • FGCT : Full GC 的總耗時(秒)
    • GCT : 垃圾回收總的耗時(秒)
    • NGCMN :年輕代( young )中初始化(最小)的大小 (千字節)
    • NGCMX :年輕代( young )的最大容量 (千字節)
    • GC :年輕代( young )中當前的容量 (千字節)
    • OGCMNold 代中初始化(最小)的大小 (千字節)
    • OGCMXold 代的最大容量 (千字節)
    • OGCold 代當前新生成的容量 (千字節)
    • PGCMNperm 代中初始化(最小)的大小 (千字節)
    • PGCMXperm 代的最大容量 (千字節)
    • PGCperm 代當前新生成的容量 (千字節)
    • S0 :年輕代中 From survivor (幸存區)已使用的占當前容量百分比
    • S1 :年輕代中 To Survivor (幸存區)已使用的占當前容量百分比
    • E :年輕代中 Eden (伊甸園)已使用的占當前容量百分比
    • Oold 代已使用的占當前容量百分比
    • Pperm 代已使用的占當前容量百分比
    • S0CMX :年輕代中 From survivor (幸存區)的最大容量 (千字節)
    • S1CMX :年輕代中 To Survivor (幸存區)的最大容量 (千字節)
    • ECMX :年輕代中 Eden (伊甸園)的最大容量 (千字節)
    • DSS :當前需要 survivor (幸存區)的容量 (千字節)( Eden 區已滿)
    • TT : 持有次數限制
    • MTT : 最大持有次數限制

jstat -gcutil PID

  • 一般我們還可以通過 jstat -gcutil pid 來獲取分代年齡的使用情況,顯示為占比,如下,表頭參考上面

jstat -gccapacity PID

  • -gccapacity 命令主要用來分析堆內存,用法參考上面,如下效果,表頭含義參看上面

其他一些命令參數

  • jstat -gcnew PID : 年輕代GC 分析,其中 TTMTT 可以看到對象在年齡代存活的年齡和存活的最大年齡

  • jstat -gcnewcapacity PID : 年輕代內存分析

  • jstat -gcold PID: 老年代 GC 分析

  • jstat -gcoldcapacity: 老年代內存分析

  • jstat -gcmetacapacity PID: 元數據內存分析

jstat -class PID

  • 統計進程中加載的類的數量,如下:

  • 說明:

Loaded:加載class的數量
Bytes:所占用空間大小
Unloaded:未加載數量
Bytes:未加載占用空間
Time:時間

jstat -compiler PID

  • 編譯信息的統計命令, 如下命令 jstat -class 15372

  • 說明:
Compiled:編譯數量。
Failed:失敗數量
Invalid:不可用數量
Time:時間
FailedType:失敗類型
FailedMethod:失敗的方法

jstat -printcompilation PID

  • JVM 編譯方法的統計,如下命令 jstat -printcompilation 15372

  • 說明:
Compiled:最近編譯方法的數量
Size:最近編譯方法的字節碼數量
Type:最近編譯方法的編譯類型。
Method:方法名標識。

好了今天就說到這里, jstat 死一個非常還用的工具,需要平時多使用多分析才能真真掌握,下次我們接着說相關的工具的使用~🕹🕹🕹🕹


本文由AnonyStar 發布,可轉載但需聲明原文出處。
歡迎關注微信公賬號 :雲棲簡碼 獲取更多優質文章
更多文章關注筆者博客 :雲棲簡碼 i-code.online


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM