|


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),tenuredgeneration,Perm Generation的内存使用情况。 jmap -dump:format=b,file=heapdump.hprof<pid> ,导出heap dump到文件heapdump.hprof |