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 打印classload和jvm 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工具组合起来进行远程监控。