天天看點

Java中JPS指令監控jpsjstatjmapjinfojcmd

很多人在學習java的時候隻是對java粗略的學了一遍,很少有人能了解jvm層面的一些東西,比如我們想看目前有多少個java程序,可以在指令行執行jps。下面我們來說說jps的一些詳細的用法。

jps

輸出正字運作的相關程序資訊

  • jps -v

     輸出傳遞給jvm參數
  • jps -l

     輸出子產品名以及包名,如果是jar 則出輸jar檔案全名
  • jps -m

     輸出傳遞給jvm參數
  • jps -mlv

     輸出程序号,包名,虛拟機參數等所有資訊
[[email protected] ~]# jps -mlv
12656 sun.tools.jps.Jps -mlv -Dapplication.home=/usr/java/jdk1.8.0_171 -Xms8m
16418 halo-latest.jar -Xms256m -Xmx256m
[[email protected] ~]#       

jstat

監控指定Java程序的性能

  • -class 

    顯示類的加載資訊的相關資訊;
  • -compiler 

    顯示類編譯相關資訊;
  • -gc 

    顯示和gc相關的堆資訊
  • -gccapacity 

    堆記憶體統計
  • -gcmetacapacity 

    元空間大小
  • -gcnew 

    新生代資訊
  • -gcnewcapacity 

    新生代大小和使用情況
  • -gcold 

    顯示老年代和永久代的資訊;
  • -gcoldcapacity 

    老年代的大小
  • -gcutil 

    顯示垃圾收集資訊
  • -gccause 

    顯示垃圾回收的相關資訊
  • -printcompilation 

    輸出JIT編譯的方法資訊;
  • 類的加載資訊 jstat -class pid
[[email protected] ~]# jstat -class 16418
Loaded  Bytes  Unloaded  Bytes     Time   
 13293 23828.4        0     0.0      17.14
 
Loaded: class加載的的總數量
Bytes: 占用空間大小
Unloaded 未加載數量
Bytes   未加載占用空間大小
Time: 加載總耗時  秒      
  • 類編譯的統計 jstat -compiler pid
[[email protected] ~]# jstat -compiler  16418
Compiled Failed Invalid   Time   FailedType FailedMethod
   14109      3       0    62.83          1 org/springframework/core/xxxxxx

Compiled:編譯數量。
Failed:編譯失敗數量
Invalid:不可用數量
Time:編譯耗時 秒
FailedType:失敗類型
FailedMethod:失敗的方法
      
  • gc回收統計 jstat -gc pid
[[email protected] ~]# jstat -gc  16418
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
8704.0 8704.0  0.0   5466.6 69952.0  29822.5   174784.0   73377.5   75008.0 71393.1 9472.0 8916.8     53    1.199   3      0.293    1.492
[[email protected] ~]# 

S0C:第一個幸存區的大小
S1C:第二個幸存區的大小
S0U:第一個幸存區的使用大小
S1U:第二個幸存區的使用大小
EC:伊甸園區的大小
EU:伊甸園區的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法區大小
MU:方法區使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
YGC:年輕代垃圾回收次數
YGCT:年輕代垃圾回收消耗時間
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時間
GCT:垃圾回收消耗總時間      
  • 堆記憶體統計 jstat -gccapacity pid
[[email protected] ~]# jstat -gccapacity  16418
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 
 87360.0  87360.0  87360.0 8704.0 8704.0  69952.0   174784.0   174784.0   174784.0   174784.0      0.0 1114112.0  75008.0      0.0 1048576.0   9472.0     53     3

NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:目前新生代容量
S0C:第一個幸存區大小
S1C:第二個幸存區的大小
EC:伊甸園區的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:目前老年代大小
OC:目前老年代大小
MCMN:最小中繼資料容量
MCMX:最大中繼資料容量
MC:目前中繼資料空間大小
CCSMN:最小壓縮類空間大小
CCSMX:最大壓縮類空間大小
CCSC:目前壓縮類空間大小
YGC:年輕代gc次數
FGC:老年代GC次數
      
  • 新生代gc統計 jstat -gcnew pid
[[email protected] ~]# jstat -gcnew   16418
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT  
8704.0 8704.0    0.0 5466.6  6  15 4352.0  69952.0  30899.8     53    1.199

S0C:第一個幸存區大小
S1C:第二個幸存區的大小
S0U:第一個幸存區的使用大小
S1U:第二個幸存區的使用大小
TT:對象在新生代存活的次數
MTT:對象在新生代存活的最大次數
DSS:期望的幸存區大小
EC:伊甸園區的大小
EU:伊甸園區的使用大小
YGC:年輕代垃圾回收次數
YGCT:年輕代垃圾回收消耗時間
      

jmap

以獲得運作中的jvm的堆的快照,進而可以離線分析堆,以檢查記憶體洩漏,檢查一些嚴重影響性能的大對象的建立,檢查系統中什麼對象最多, 各種對象所占記憶體的大小等等。可以使用jmap生成Heap Dump

  • jmap -heap 16418

     列印heap空間的概要
[[email protected] ~]# jmap -heap 16418
Attaching to process ID 16418, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11

using thread-local object allocation.
Mark Sweep Compact GC

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 268435456 (256.0MB)
   NewSize                  = 89456640 (85.3125MB)
   MaxNewSize               = 89456640 (85.3125MB)
   OldSize                  = 178978816 (170.6875MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):         // 新生代區
   capacity = 80543744 (76.8125MB)                //配置設定的大小
   used     = 44269728 (42.218902587890625MB)     //使用
   free     = 36274016 (34.593597412109375MB)     //剩餘
   54.96358351556143% used                        
Eden Space:                                     //伊甸園區
   capacity = 71630848 (68.3125MB)
   used     = 38671896 (36.880393981933594MB)
   free     = 32958952 (31.432106018066406MB)
   53.98776795159538% used
From Space:                                   //年輕代 幸存者1
   capacity = 8912896 (8.5MB)
   used     = 5597832 (5.338508605957031MB)
   free     = 3315064 (3.1614913940429688MB)
   62.80598359949448% used
To Space:                                     /年輕代 幸存者2
   capacity = 8912896 (8.5MB)
   used     = 0 (0.0MB)
   free     = 8912896 (8.5MB)
   0.0% used
tenured generation:                           //老年代
   capacity = 178978816 (170.6875MB)
   used     = 75138528 (71.65768432617188MB)
   free     = 103840288 (99.02981567382812MB)
   41.98179967846027% used

30511 interned Strings occupying 3634816 bytes.
      
  • jmap -dump:live,format=b,file=/home/tess.dump 16418

     産生一個HeapDump檔案
  • jmap -histo 16418

     統計各個類的執行個體數目以及占用記憶體,并按照記憶體使用量從多至少的順序排列。

jinfo

檢視目标 Java 程序的參數,如傳遞給 Java 虛拟機的參數

  • jinfo 16418

jcmd

可以用來實作前面除了jstat 之外所有指令的功能。

文章來自網絡,有問題可以在下面評論,技術問題可以私聊。

繼續閱讀