如何通過jstat命令進行查看堆記憶體使用情況?

来源:https://www.cnblogs.com/huaweiyun/archive/2023/02/07/17099031.html
-Advertisement-
Play Games

摘要:jstat命令可以查看堆記憶體各部分的使用量,以及載入類的數量。 本文分享自華為雲社區《JVM之通過jstat命令進行查看堆記憶體使用情況》,作者:共飲一杯無 。 基本概念 jstat是JDK自帶的一個輕量級小工具。它位於java的bin目錄下,主要利用JVM內建的指令對Java應用程式的資源和性 ...


摘要:jstat命令可以查看堆記憶體各部分的使用量,以及載入類的數量。

本文分享自華為雲社區《JVM之通過jstat命令進行查看堆記憶體使用情況》,作者:共飲一杯無 。

基本概念

jstat是JDK自帶的一個輕量級小工具。它位於java的bin目錄下,主要利用JVM內建的指令對Java應用程式的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控。jstat命令可以查看堆記憶體各部分的使用量,以及載入類的數量。命令的格式如下:

jstat [-命令選項] [vmid] [間隔時間/毫秒] [查詢次數]

C:\Users\zjq>jstat -help
Usage: jstat -help|-options
 jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
Definitions:
 <option>      An option reported by the -options option
 <vmid>        Virtual Machine Identifier. A vmid takes the following form:
 <lvmid>[@<hostname>[:<port>]]
                Where <lvmid> is the local vm identifier for the target
                Java virtual machine, typically a process id; <hostname> is
                the name of the host running the target Java virtual machine;
                and <port> is the port number for the rmiregistry on the
                target host. See the jvmstat documentation for a more complete
                description of the Virtual Machine Identifier.
 <lines>       Number of samples between header lines.
 <interval>    Sampling interval. The following forms are allowed:
 <n>["ms"|"s"]
                Where <n> is an integer and the suffix specifies the units as
                milliseconds("ms") or seconds("s"). The default units are "ms".
 <count>       Number of samples to take before terminating.
  -J<flag>      Pass <flag> directly to the runtime system.

說明:

  • option:參數選項
  • -t:可以在列印的列加上Timestamp列,用於顯示系統運行的時間
  • -h:可以在周期性數據輸出的時候,指定輸出多少行以後輸出一次表頭
  • vmid:Virtual Machine ID( 進程的 pid)
  • interval:執行每次的間隔時間,單位為毫秒
  • count:用於指定輸出多少次記錄,預設則會一直列印

option 可以從下麵參數中選擇
jstat -options

  • -class 用於查看類載入情況的統計
  • -compiler 用於查看HotSpot中即時編譯器編譯情況的統計
  • -gc 用於查看JVM中堆的垃圾收集情況的統計
  • -gccapacity 用於查看新生代、老生代及持久代的存儲容量情況
  • -gcmetacapacity 顯示metaspace的大小
  • -gcnew 用於查看新生代垃圾收集的情況
  • -gcnewcapacity 用於查看新生代存儲容量的情況
  • -gcold 用於查看老生代及持久代垃圾收集的情況
  • -gcoldcapacity 用於查看老生代的容量
  • -gcutil 顯示垃圾收集信息
  • -gccause 顯示垃圾回收的相關信息(通-gcutil),同時顯示最後一次僅當前正在發生的垃圾收集的原因
  • -printcompilation 輸出JIT編譯的方法信息

案例

-class 查看class載入統計

C:\Users\zjq>jps
24832 Jps
21180 Bootstrap
C:\Users\zjq>jstat -class 21180
Loaded  Bytes  Unloaded  Bytes     Time
 3800 7339.7 409 783.0 6.35

說明:

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

-compiler 查看編譯統計

C:\Users\zjq>jstat -compiler 21180
Compiled Failed Invalid   Time   FailedType FailedMethod
 2743 0 0 10.53 0

說明:

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

-gc 垃圾回收統計

C:\Users\zjq>jstat -gc 21180
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
28160.0 30208.0 0.0 0.0 260096.0 163920.6 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153
#也可以指定列印的間隔和次數,每1秒中列印一次,共列印5次
C:\Users\zjq>jstat -gc 21180 1000 3
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
28160.0 30208.0 0.0 0.0 260096.0 171724.8 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153
28160.0 30208.0 0.0 0.0 260096.0 172592.0 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153
28160.0 30208.0 0.0 0.0 260096.0 172592.0 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153

說明:

  • S0C:第一個Survivor區的大小(KB)
  • S1C:第二個Survivor區的大小(KB)
  • S0U:第一個Survivor區的使用大小(KB)
  • S1U:第二個Survivor區的使用大小(KB)
  • EC:Eden區的大小(KB)
  • EU:Eden區的使用大小(KB)
  • OC:Old 區大小(KB)
  • OU:Old使用大小(KB)
  • MC:方法區大小(KB)
  • MU:方法區使用大小(KB)
  • CCSC:壓縮類空間大小(KB)
  • CCSU:壓縮類空間使用大小(KB)
  • YGC:年輕代垃圾回收次數
  • YGCT:年輕代垃圾回收消耗時間
  • FGC:老年代垃圾回收次數
  • FGCT:老年代垃圾回收消耗時間
  • GCT:垃圾回收消耗總時間

-gccapacity 堆記憶體統計

[root@zjq ~]# jstat -gccapacity 3346 #用於查看新生代、老生代及持久代的存儲容量情況
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
[root@zjq ~]# jstat -gccapacity -h5 3346 1000 #-h5:每5行顯示一次表頭 1000:每1秒鐘顯示一次,單位為毫秒
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
 1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
  • NGCMN:年輕代(young)中初始化(最小)的大小(位元組)
  • NGCMX:年輕代(young)的最大容量 (位元組)
  • NGC:年輕代(young)中當前的容量 (位元組)
  • S0C:年輕代中第一個survivor(幸存區)的容量 (位元組)
  • S1C:年輕代中第二個survivor(幸存區)的容量 (位元組)
  • EC:年輕代中Eden(伊甸園)的容量 (位元組)
  • OGCMN:old代中初始化(最小)的大小 (位元組)
  • OGCMX:old代的最大容量(位元組)
  • OGC:old代當前新生成的容量 (位元組)
  • OC:Old代的容量 (位元組)
  • MCMN:metaspace(元空間)中初始化(最小)的大小 (位元組)
  • MCMX:metaspace(元空間)的最大容量 (位元組)
  • MC:metaspace(元空間)當前新生成的容量 (位元組)
  • CCSMN:最小壓縮類空間大小
  • CCSMX:最大壓縮類空間大小
  • CCSC:當前壓縮類空間大小
  • YGC:從應用程式啟動到採樣時年輕代中gc次數
  • FGC:從應用程式啟動到採樣時old代(全gc)gc次數

-gcmetacapacity 元數據空間統計

[root@zjq ~]# jstat -gcmetacapacity 3346 #顯示元數據空間的大小
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 8 0 0.000 0.020
  • MCMN:最小元數據容量
  • MCMX:最大元數據容量
  • MC:當前元數據空間大小
  • CCSMN:最小壓縮類空間大小
  • CCSMX:最大壓縮類空間大小
  • CCSC:當前壓縮類空間大小
  • YGC:從應用程式啟動到採樣時年輕代中gc次數
  • FGC:從應用程式啟動到採樣時old代(全gc)gc次數
  • FGCT:從應用程式啟動到採樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程式啟動到採樣時gc用的總時間(s)

-gcnew 新生代垃圾回收統計

[root@zjq ~]# jstat -gcnew 3346 #用於查看新生代垃圾收集的情況
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
128.0 128.0 67.8 0.0 1 15 64.0 1024.0 362.2 8 0.020 
  • S0C:年輕代中第一個survivor(幸存區)的容量 (位元組)
  • S1C:年輕代中第二個survivor(幸存區)的容量 (位元組)
  • S0U:年輕代中第一個survivor(幸存區)目前已使用空間 (位元組)
  • S1U:年輕代中第二個survivor(幸存區)目前已使用空間 (位元組)
  • TT:持有次數限制
  • MTT:最大持有次數限制
  • DSS:期望的幸存區大小
  • EC:年輕代中Eden(伊甸園)的容量 (位元組)
  • EU:年輕代中Eden(伊甸園)目前已使用空間 (位元組)
  • YGC:從應用程式啟動到採樣時年輕代中gc次數
  • YGCT:從應用程式啟動到採樣時年輕代中gc所用時間(s)

-gcnewcapacity 新生代記憶體統計

[root@zjq ~]# jstat -gcnewcapacity 3346 #用於查看新生代存儲容量的情況
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
1280.0 83264.0 1280.0 8320.0 128.0 8320.0 128.0 66624.0 1024.0 8 0
  • NGCMN:年輕代(young)中初始化(最小)的大小(位元組)
  • NGCMX:年輕代(young)的最大容量 (位元組)
  • NGC:年輕代(young)中當前的容量 (位元組)
  • S0CMX:年輕代中第一個survivor(幸存區)的最大容量 (位元組)
  • S0C:年輕代中第一個survivor(幸存區)的容量 (位元組)
  • S1CMX:年輕代中第二個survivor(幸存區)的最大容量 (位元組)
  • S1C:年輕代中第二個survivor(幸存區)的容量 (位元組)
  • ECMX:年輕代中Eden(伊甸園)的最大容量 (位元組)
  • EC:年輕代中Eden(伊甸園)的容量 (位元組)
  • YGC:從應用程式啟動到採樣時年輕代中gc次數
  • FGC:從應用程式啟動到採樣時old代(全gc)gc次數

-gcold 老年代垃圾回收統計

[root@zjq~]# jstat -gcold 3346 #用於查看老年代及持久代垃圾收集的情況
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
8448.0 8227.5 1024.0 1003.7 15104.0 2102.2 8 0 0.000 0.020 
  • MC:metaspace(元空間)的容量 (位元組)
  • MU:metaspace(元空間)目前已使用空間 (位元組)
  • CCSC:壓縮類空間大小
  • CCSU:壓縮類空間使用大小
  • OC:Old代的容量 (位元組)
  • OU:Old代目前已使用空間 (位元組)
  • YGC:從應用程式啟動到採樣時年輕代中gc次數
  • FGC:從應用程式啟動到採樣時old代(全gc)gc次數
  • FGCT:從應用程式啟動到採樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程式啟動到採樣時gc用的總時間(s)

-gcoldcapacity 老年代記憶體統計

[root@zjq~]# jstat -gcoldcapacity 3346 #用於查看老年代的容量
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
15104.0 166592.0 15104.0 15104.0 8 0 0.000 0.020
  • OGCMN:old代中初始化(最小)的大小 (位元組)
  • OGCMX:old代的最大容量(位元組)
  • OGC:old代當前新生成的容量 (位元組)
  • OC:Old代的容量 (位元組)
  • YGC:從應用程式啟動到採樣時年輕代中gc次數
  • FGC:從應用程式啟動到採樣時old代(全gc)gc次數
  • FGCT:從應用程式啟動到採樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程式啟動到採樣時gc用的總時間(s)

-gcutil 垃圾回收統計

[root@zjq~]# jstat -gcutil 3346 #顯示垃圾收集信息
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
52.97 0.00 42.10 13.92 97.39 98.02 8 0.020 0 0.000 0.020 
  • S0:年輕代中第一個survivor(幸存區)已使用的占當前容量百分比
  • S1:年輕代中第二個survivor(幸存區)已使用的占當前容量百分比
  • E:年輕代中Eden(伊甸園)已使用的占當前容量百分比
  • O:old代已使用的占當前容量百分比
  • M:元數據區已使用的占當前容量百分比
  • CCS:壓縮類空間已使用的占當前容量百分比
  • YGC :從應用程式啟動到採樣時年輕代中gc次數
  • YGCT :從應用程式啟動到採樣時年輕代中gc所用時間(s)
  • FGC :從應用程式啟動到採樣時old代(全gc)gc次數
  • FGCT :從應用程式啟動到採樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程式啟動到採樣時gc用的總時間(s)

-gccause 顯示垃圾回收的相關信息

[root@zjq~]# jstat -gccause 3346 #顯示垃圾回收的相關信息(同-gcutil),同時顯示最後一次或當前正在發生的垃圾回收的誘因
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
52.97 0.00 46.09 13.92 97.39 98.02 8 0.020 0 0.000 0.020 Allocation Failure No GC
  • LGCC:最後一次GC原因
  • GCC:當前GC原因(No GC 為當前沒有執行GC)

-printcompilation JVM編譯方法統計

[root@zjq ~]# jstat -printcompilation 3346 #輸出JIT編譯的方法信息
Compiled Size Type Method
421 60 1 sun/nio/ch/Util$2 clear
  • Compiled:編譯任務的數目
  • Size:方法生成的位元組碼的大小
  • Type:編譯類型
  • Method:類名和方法名用來標識編譯的方法。類名使用/做為一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設置的

 

點擊關註,第一時間瞭解華為雲新鮮技術~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文主要記錄對象存儲組件Minio、數據湖組件Hudi及查詢引擎Hive\Spark之間的相容性配置及測試情況,Spark及Hive無需多言,這裡簡單介紹下Minio及Hudi。 MinIO 是在 GNU Affero 通用公共許可證 v3.0 下發佈的高性能對象存儲。 它是與 Amazon S3 ...
  • Flutter是Google推出的一款UI工具包,可以通過一套代碼同時在iOS和Android上構建媲美原生體驗的精美應用。它使用Dart作為開發語言,不依賴原生控制項,而是將自有的控制項庫,通過Skia圖形引擎直接繪製在平臺所提供的畫布上。簡單來說,它擁有以下特性:不依賴平臺、組件庫原生實現、能高速渲... ...
  • Flex 佈局目前已經非常流行了,現在幾乎已經相容所有瀏覽器了。在文章開始之前我們需要思考一個問題:我們為什麼要使用 Flex 佈局? 其實答案很簡單,那就是 Flex 佈局好用。一個新事物的出現往往是因為舊事物不那麼好用了,比如,如果想讓你用傳統的 css 佈局來實現一個塊元素垂直水平居中你會怎麼 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 使用須知 2017年下半年,微信6.5.21版本支持線上音視頻功能。開發者可以通過兩個音視頻組件 和 實現實時地線上直播、視頻通話、語音通話等功能。 上述功能需要用到兩個小程式媒體組件中的兩個: live-pusher 與 live-pl ...
  • 摘要:當協議、子功能變數名稱、主功能變數名稱、埠號中任意一個不相同時,都算作不同域。不同域之間相互請求資源,就算作“跨域”。 本文分享自華為雲社區《九種跨域方式實現原理咋回事》,作者:龍哥手記 一、什麼是跨域? 1.什麼是同源策略及其限制內容? 同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同 ...
  • 作者: 京東零售 陳震 一、 什麼是Backbone 在前端的發展道路中,前端框架元老之一jQuery對繁瑣的DOM操作進行了封裝,提供了鏈式調用、各類選擇器,屏蔽了不同瀏覽器寫法的差異性,但是前端開發過程中依然存在作用域污染、代碼復用度低、冗餘度高、數據和事件綁定煩瑣等痛點。 5年後,Backbo ...
  • 1.Api 自動導入 unplugin-auto-import自動引入 composition api,不需要再手動引入。(npm 地址) 下載 npm i -D unplugin-auto-import 配置 vite.config.ts import AutoImport from "unplu ...
  • 如果想實現chatGPT的網頁版,調用介面就可以了,但是如果需要聯繫上下文語境,就需要在傳遞的數據的時候進行下拼接 傳參的時候對所有的對話數據進行拼接,拼成下麵這樣 {"prompt":"(You:在嗎\n)這裡在哦,有什麼可以幫助你的嗎?(You:你這個系統多少錢\n)抱歉,您想知道什麼?這裡是客 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...