jmap, jhat命令

 

jmap命令有下面几种常用的用法

jmap [pid]

jmap -histo:live [pid] >a.log

jmap -dump:live,format=b,file=xxx.xxx [pid]

用得最多是后面两个。其中,jmap -histo:live [pid] 可以查看当前Java进程创建的活跃对象数目和占用内存大小。

 

jmap查看各个代的内存使用

jmap 可以从 core dump文件或进程中获得内存的具体匹配情况,包括 Heap size, Perm size等等。

jmap命令格式:

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

1)参数说明 

pid:java进程 id

executable:产生 core dump的 java可执行程序

core:core dump文件

remote-hostname-or-IP:远程 debug服务的主机名或 ip

server-id:远程 debug服务的 id

2) option参数:

-heap

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

-histo[:live]

打印jvm heap 的直方图。输出类名、每个类的实例数目、对象占用大小。 VM的内部类名字开头会加上前缀 ”*”.

如果加上live 则只统计活的对象数量。

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

使用hprof二进制形式,导出heap 内容到文件filename。

假如指定live 选项,那么只输出活的对象到文件 .

hprof二进制可用jhat命令查看,

jhat是sun 1.6及以上版本中自带的一个用于分析JVM 堆DUMP 文件的工具,基于此工具可分析JVM HEAP 中对象的内存占用情况

一般情况下,我们都会配置上-XX:+HeapDumpOnOutOfMemoryError,

 然后使用MAT工具去分析(Memory Analyzer Tool ),MAT使用很简单。

-clstats

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

包含每个classloader 的名字、是否存活、地址、父 classloade、加载的 class数量、内部 String的数量和占用内存数。

使用 jmap -heap pid ,可以查看各个代的内存使用情况,如:New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的内存使用情况。

jmap -dump:format=b,file=heapdump.hprof <pid> ,导出heap dump到文件heapdump.hprof

原文地址:https://www.cnblogs.com/ken-jl/p/8998880.html