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中全部生存的对象的状况)。包括对象数量和所占空间大小。

相关文章
相关标签/搜索