Hotspot JVM虛擬機常用監控工具

1、jmap

      在unix系統中,使用jmap --help查看jmap的參數,如下所述:

      [root@localhost bin]# jmap --help
                Usage:
                jmap [option] <pid>
                (to connect to running process)
                jmap [option] <executable <core>
                (to connect to a core file)
               jmap [option] [server_id@]<remote server IP or hostname>
                (to connect to remote debug server)

where <option> is one of:
    <none>               to print same info as Solaris pmap
    -heap                to print java heap summary
    -histo[:live]        to print histogram of java object heap; if the "live"
                         suboption is specified, only count live objects
    -permstat            to print permanent generation statistics
    -finalizerinfo       to print information on objects awaiting finalization
    -dump:<dump-options> to dump java heap in hprof binary format
                         dump-options:
                           live         dump only live objects; if not specified,
                                        all objects in the heap are dumped.
                           format=b     binary format
                           file=<file>  dump heap to <file>
                         Example: jmap -dump:live,format=b,file=heap.bin <pid>
    -F                   force. Use with -dump:<dump-options> <pid> or -histo
                         to force a heap dump or histogram when <pid> does not
                         respond. The "live" suboption is not supported
                         in this mode.
    -h | -help           to print this help message
    -J<flag>             to pass <flag> directly to the runtime system

    

      使用實例:

      $  jmap -dump:format=b,file=outfile 6365  ---打印dump文件,文件格式是二進制,outfile文件在當前目錄,也可以制定目錄。

      $  jmap -dump:live,format=b,file=outfile 6365   ----打印dump文件活的對象到文件

      $  jmap -heap 6365    打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情況

      $  jmap  -finalizerinfo      6365   打印正在回收的對象

      $  jmap  -histo[:live]  6365     打印每個class的實例數目,內存佔用,類全名信息. VM的內部類名字開頭會加上前綴”*如果live子參數加上後,只統計活  的對象數量.

      $  jmap -permstat 6365    打印classloadjvm heap長久層的信息包含每個classloader的名字,活潑性,地址,classloader和加載的class數量另外,內部String的數量和佔用內存數也會打印出來.

2、jstat

      jstat是jdk自帶一個輕量級工具。全稱爲“Java Virtual Machine statistics monitoring tool”,它位於java的bin目錄下,主要利用JVM內建的指令對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常適用。

     jstat工具特別強大,有衆多的可選項,詳細查看堆內各個部分的使用量,以及加載類的數量。使用時,需加上查看進程的進程id,和所選參數。參考格式如下:

     jstat -options

     可以列出當前JVM版本支持的選項,常見有:

    

  • l  class (類加載器) 
  • l  compiler (JIT) 
  • l  gc (GC堆狀態) 
  • l  gccapacity (各區大小) 
  • l  gccause (最近一次GC統計和原因) 
  • l  gcnew (新區統計)
  • l  gcnewcapacity (新區大小)
  • l  gcold (老區統計)
  • l  gcoldcapacity (老區大小)
  • l  gcpermcapacity (永久區大小)
  • l  gcutil (GC統計彙總)
  • l  printcompilation (HotSpot編譯統計)

        2.1、jstat -class <pid> :顯示加載的class數量,以及所佔空間等信息。

         

顯示列名

具體描述

Loaded

裝載的類的數量

Bytes

裝載類所佔用的字節數

Unloaded

卸載類的數量

Bytes

卸載類的字節數

Time

裝載和卸載類所花費的時間


       2.2、jstat -compiler <pid> 顯示VM實時編譯的數量等信息。

         

顯示列名

具體描述

Compiled

編譯任務執行數量

Failed

編譯任務執行失敗數量

Invalid  

編譯任務執行失效數量

Time  

編譯任務消耗時間

FailedType

最後一個編譯失敗任務的類型

FailedMethod

最後一個編譯失敗任務所在的類及方法


2.3、jstat -gc <pid>:可以顯示gc的信息,查看gc的次數,以及時間,同時可以打印時間間隔和次數。

顯示列名

具體描述

S0C   

年輕代中第一個survivor(倖存區)的容量 (KB)

S1C   

年輕代中第二個survivor(倖存區)的容量 (KB)

S0U   

年輕代中第一個survivor(倖存區)目前已使用空間 (KB)

S1U     

年輕代中第二個survivor(倖存區)目前已使用空間 (KB)

EC      

年輕代中Eden(伊甸園)的容量 (KB)

EU       

年輕代中Eden(伊甸園)目前已使用空間 (KB)

OC        

Old代的容量 (KB)

OU      

Old代目前已使用空間 (KB)

PC    

Perm(持久代)的容量 (KB)

PU

Perm(持久代)目前已使用空間 (KB)

YGC    

從應用程序啓動到採樣時年輕代中gc次數

YGCT   

從應用程序啓動到採樣時年輕代中gc所用時間(s)

FGC   

從應用程序啓動到採樣時old代(全gc)gc次數

FGCT    

從應用程序啓動到採樣時old代(全gc)gc所用時間(s)

GCT

從應用程序啓動到採樣時gc用的總時間(s)

heap大小=新生代+年老代=oc+ec+s0c+s1c.

2.4、jstat -gccapacity <pid>:可以顯示,VM內存中三代(young,old,perm)對象使用和佔用大小

顯示列名

具體描述

NGCMN   

年輕代(young)中初始化(最小)的大小(KB)

NGCMX    

年輕代(young)的最大容量 (KB)

NGC    

年輕代(young)中當前的容量 (KB)

S0C  

年輕代中第一個survivor(倖存區)的容量 (KB)

S1C      

年輕代中第二個survivor(倖存區)的容量 (KB)

EC     

年輕代中Eden(伊甸園)的容量 (KB)

OGCMN     

old代中初始化(最小)的大小 (KB)

OGCMX      

old代的最大容量(KB)

OGC

old代當前新生成的容量 (KB)

OC     

Old代的容量 (KB)

PGCMN   

perm代中初始化(最小)的大小 (KB)

PGCMX    

perm代的最大容量 (KB)  

PGC      

perm代當前新生成的容量 (KB)

PC    

Perm(持久代)的容量 (KB)

YGC   

從應用程序啓動到採樣時年輕代中gc次數

FGC

從應用程序啓動到採樣時old代(全gc)gc次數


2.5、jstat -gcutil <pid> 統計gc信息

顯示列名

具體描述

S0    

年輕代中第一個survivor(倖存區)已使用的佔當前容量百分比

S1    

年輕代中第二個survivor(倖存區)已使用的佔當前容量百分比

E     

年輕代中Eden(伊甸園)已使用的佔當前容量百分比

O     

old代已使用的佔當前容量百分比

P    

perm代已使用的佔當前容量百分比

YGC    

從應用程序啓動到採樣時年輕代中gc次數

YGCT   

從應用程序啓動到採樣時年輕代中gc所用時間(s)

FGC   

從應用程序啓動到採樣時old代(全gc)gc次數

FGCT    

從應用程序啓動到採樣時old代(全gc)gc所用時間(s)

GCT

從應用程序啓動到採樣時gc用的總時間(s)


2.6、jstat -gcnew <pid>:年輕代對象信息

顯示列名

具體描述

S0C   

年輕代中第一個survivor(倖存區)的容量 (KB)

S1C   

年輕代中第二個survivor(倖存區)的容量 (KB)

S0U   

年輕代中第一個survivor(倖存區)目前已使用空間 (KB)

S1U  

年輕代中第二個survivor(倖存區)目前已使用空間 (KB)

TT

持有次數限制

MTT 

最大持有次數限制

EC      

年輕代中Eden(伊甸園)的容量 (KB)

EU    

年輕代中Eden(伊甸園)目前已使用空間 (KB)

YGC    

從應用程序啓動到採樣時年輕代中gc次數

YGCT

從應用程序啓動到採樣時年輕代中gc所用時間(s)


2.7、jstat -gcnewcapacity <pid> : 年輕代對象的信息以及佔用量

顯示列名

具體描述

NGCMN     

年輕代(young)中初始化(最小)的大小(KB)

NGCMX      

年輕代(young)的最大容量 (KB)

NGC     

年輕代(young)中當前的容量 (KB)

S0CMX    

年輕代中第一個survivor(倖存區)的最大容量 (KB)

S0C    

年輕代中第一個survivor(倖存區)的容量 (KB)

S1CMX    

年輕代中第二個survivor(倖存區)的最大容量 (KB)

S1C      

年輕代中第二個survivor(倖存區)的容量 (KB)

ECMX

年輕代中Eden(伊甸園)的最大容量 (KB)

EC     

年輕代中Eden(伊甸園)的容量 (KB)

YGC

從應用程序啓動到採樣時年輕代中gc次數

FGC

從應用程序啓動到採樣時old代(全gc)gc次數


2.8、jstat -gcold <pid>:old 代對象的信息

顯示列名

具體描述

PC      

Perm(持久代)的容量 (KB)

PU       

Perm(持久代)目前已使用空間 (KB)

OC         

Old代的容量 (KB)

OU      

Old代目前已使用空間 (KB)

YGC   

從應用程序啓動到採樣時年輕代中gc次數

FGC   

從應用程序啓動到採樣時old代(全gc)gc次數

FGCT    

從應用程序啓動到採樣時old代(全gc)gc所用時間(s)

GCT

從應用程序啓動到採樣時gc用的總時間(s)


2.9、jstat -gcoldcapacity <pid> :old 代對象的信息以及佔用量

顯示列名

具體描述

OGCMN      

old代中初始化(最小)的大小 (KB)

OGCMX       

old代的最大容量(KB)

OGC        

old代當前新生成的容量 (KB)

OC      

Old代的容量 (KB)

YGC  

從應用程序啓動到採樣時年輕代中gc次數

FGC   

從應用程序啓動到採樣時old代(全gc)gc次數

FGCT    

從應用程序啓動到採樣時old代(全gc)gc所用時間(s)

GCT

從應用程序啓動到採樣時gc用的總時間(s)


2.10、jstat -gcpermcapacity <pid> :perm對象的信息以及佔用量。

顯示列名

具體描述

PGCMN     

perm代中初始化(最小)的大小 (KB)

PGCMX      

perm代的最大容量 (KB)  

PGC        

perm代當前新生成的容量 (KB)

PC     

Perm(持久代)的容量 (KB)

YGC  

從應用程序啓動到採樣時年輕代中gc次數

FGC   

從應用程序啓動到採樣時old代(全gc)gc次數

FGCT    

從應用程序啓動到採樣時old代(全gc)gc所用時間(s)

GCT

從應用程序啓動到採樣時gc用的總時間(s)


2.11、jstat -printcompilation <pid> :當前VM執行的信息

顯示列名

具體描述

Compiled 

編譯任務的數目

Size 

方法生成的字節碼的大小

Type

編譯類型

Method

類名和方法名用來標識編譯的方法。類名使用/做爲一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設置的

   

3、jconsole

      jconsole是一個圖形界面的監控工具,可以通過vnc工具組合起來進行遠程監控。

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