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

jstat

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

jstat -gc pid

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

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

jstat -gcutil PID

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

<a name="Dh6RS"></a>

jstat -gccapacity PID

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

<a name="5hQ98"></a>

其他一些命令參數(shù)

  • jstat -gcnew PID : 年輕代GC 分析,其中 TTMTT 可以看到對象在年齡代存活的年齡和存活的最大年齡
  • jstat -gcnewcapacity PID : 年輕代內存分析
  • jstat -gcold PID: 老年代 GC 分析
  • jstat -gcoldcapacity: 老年代內存分析
  • jstat -gcmetacapacity PID: 元數(shù)據(jù)內存分析

<a name="mP8cH"></a>

jstat -class PID

  • 統(tǒng)計進程中加載的類的數(shù)量,如下:
  • 說明:

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

<a name="FpFCV"></a>

jstat -compiler PID

  • 編譯信息的統(tǒng)計命令, 如下命令 jstat -class 15372
  • 說明:
Compiled:編譯數(shù)量。
Failed:失敗數(shù)量
Invalid:不可用數(shù)量
Time:時間
FailedType:失敗類型
FailedMethod:失敗的方法

<a name="DbXrJ"></a>

jstat -printcompilation PID

  • JVM 編譯方法的統(tǒng)計,如下命令 jstat -printcompilation 15372
  • 說明:
Compiled:最近編譯方法的數(shù)量
Size:最近編譯方法的字節(jié)碼數(shù)量
Type:最近編譯方法的編譯類型。
Method:方法名標識。

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


本文由AnonyStar 發(fā)布,可轉載但需聲明原文出處。
更多文章關注筆者博客 :云棲簡碼 i-code.online

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容