jvm gc狀況查看

java經過jvm本身管理內存,同時Java提供了一些命令行工具,用於查看內存使用狀況。
這裏主要介紹一下jstat、jmap命令以及相關工具。java

1、jstat查看 gc實時執行狀況

jstat命令命令格式:

jstat [Options] pid [interval] [count]算法

命令參數說明:

Options,通常使用 -gcutil 或  -gc 查看gc 狀況jvm

pid,當前運行的 java進程號 
interval,間隔時間,單位爲秒或者毫秒 
count,打印次數,若是缺省則打印無數次工具

Options 參數以下:spa

-gc:統計 jdk gc時 heap信息,以使用空間字節數表示命令行

-gcutil:統計 gc時, heap狀況,以使用空間的百分比表示debug

-class:統計 class loader行爲信息code

-compile:統計編譯行爲信息orm

-gccapacity:統計不一樣 generations(新生代,老年代,持久代)的 heap容量狀況server

-gccause:統計引發 gc的事件

-gcnew:統計 gc時,新生代的狀況

-gcnewcapacity:統計 gc時,新生代 heap容量

-gcold:統計 gc時,老年代的狀況

-gcoldcapacity:統計 gc時,老年代 heap容量

-gcpermcapacity:統計 gc時, permanent區 heap容量

示例 

  $ jstat -gc 12538 5000

每5 秒一次顯示進程號爲 12538的 java進成的 GC狀況,結果以下圖:

結果說明

標誌

說明

S0C

年輕代中第一個survivor區的容量 (字節)

S1C

年輕代中第二個survivor區的容量 (字節)

S0U

年輕代中第一個survivor區目前已使用空間 (字節)

S1U

年輕代中第二個survivor區目前已使用空間 (字節)

EC

年輕代中Eden的容量 (字節)

EU

年輕代中Eden目前已使用空間 (字節)

OC

Old代的容量 (字節)

OU

Old代目前已使用空間 (字節)

PC

Perm(持久代)的容量 (字節)

PU

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

YGC

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

YGCT

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

FGC

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

FGCT

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

GCT

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

NGCMN

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

NGCMX

年輕代(young)的最大容量 (字節)

NGC

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

OGCMN

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

OGCMX

old代的最大容量 (字節)

OGC

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

PGCMN

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

PGCMX

perm代的最大容量 (字節)  

PGC

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

S0

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

S1

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

E

年輕代中Eden已使用的佔當前容量百分比

O

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

P

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

S0CMX

年輕代中第一個survivor區的最大容量 (字節)

S1CMX

年輕代中第二個survivor區的最大容量 (字節)

ECMX

年輕代中Eden的最大容量 (字節)

DSS

當前須要survivor區的容量 (字節)(Eden區已滿)

TT

持有次數限制

MTT

最大持有次數限制

jstatd 啓動jvm 監控服務

它是一個基於 rmi的應用,向遠程機器提供本機 jvm應用程序的信息。默認端口 1099。

  $ jstatd -J-Djava.security.policy=my.policy

2、jmap查看各個代的內存使用

jmap 能夠從 core文件或進程中得到內存的具體匹配狀況,包括 Heap size, Perm size等等。

jmap命令格式:

     jmap [ option ] <pid> | <executable core> | <[server-id@]remote-hostname-or-IP>

參數說明  

pid:java進程 id

executable:產生 core dump的 java可執行程序

core:core dump文件

remote-hostname-or-IP:遠程 debug服務的主機名或 ip

server-id:遠程 debug服務的 id 

option參數

-heap 

打印heap的概要信息,GC 使用的算法,heap的配置及使用狀況 .

-histo[:live] 

打印jvm heap 的直方圖。輸出類名、每一個類的實例數目、對象佔用大小。 VM的內部類名字開頭會加上前綴 」*」. 

若是加上live 則只統計活的對象數量。

-dump:[live,]format=b,file=<filename> 

使用hprof二進制形式,導出heap 內容到文件filename。

假如指定live 選項,那麼只輸出活的對象到文件 . 

-finalizerinfo 

打印正等候回收的對象的信息 .

-permstat 

打印classload 和jvm heap 持久代的信息。

包含每一個classloader 的名字、是否存活、地址、父 classloade、加載的 class數量、內部 String的數量和佔用內存數。

-F

當pid沒有響應的時候,與-dump或者 -histo共同使用,強制生成 dump文件或 histo信息 . 在這個模式下 ,live子參數無效 . 

-J

傳遞參數給啓動jmap 的jvm.

64位機上使用須要使用以下方式: jmap -J-d64 -heap pid

使用  jmap -heap pid ,能夠查看各個代的內存使用狀況。 

$ jmap -heap 2083

能夠觀察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的內存使用狀況

jmap -dump:format=b,file=heapdump.hprof <pid>

導出heap dump到文件heapdump.hprof

jmap -histo 2083 | jmap -histo:live 2083

能夠觀察heap中全部對象的狀況(heap中全部生存的對象的狀況)。包括對象數量和所佔空間大小。

相關文章
相關標籤/搜索