、命令基本概述

Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

使用方法 jmap -histo pid。如果使用SHELL ,可采用jmap -histo pid>a.log日志将其保存到文件中,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具)。

64位机上使用需要使用如下方式:

jmap -J-d64 -heap pid

2、命令格式

l  jmap [ option ] pid

l  jmap [ option ] executable core

l  jmap [ option ] [server-id@]remote-hostname-or-IP

3、参数说明

1)、options:

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

l  core 将被打印信息的core dump文件;

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

l  server-id 唯一id,假如一台主机上多个远程debug服务;

2)、基本参数:

Ø  -dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.

$jmap–dump:live,format=b,file=aaa.bin 3772

Ø  -finalizerinfo 打印正等候回收的对象的信息

$jmap -finalizerinfo 3772

Attaching to process ID 3772, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 20.0-b11

Number of objects pending for finalization: 0 (等候回收的对象为0个)

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

$jmap –heap 3772

using parallel threads in the new generation.  ##新生代采用的是并行线程处理方式

using thread-local object allocation.

Concurrent Mark-Sweep GC   ##同步并行垃圾回收

Heap Configuration:  ##堆配置情况

MinHeapFreeRatio = 40 ##最小堆使用比例

MaxHeapFreeRatio = 70 ##最大堆可用比例

MaxHeapSize      = 2147483648 (2048.0MB) ##最大堆空间大小

NewSize          = 268435456 (256.0MB) ##新生代分配大小

MaxNewSize       = 268435456 (256.0MB) ##最大可新生代分配大小

OldSize          = 5439488 (5.1875MB) ##老生代大小

NewRatio         = 2  ##新生代比例

SurvivorRatio    = 8 ##新生代与suvivor的比例

PermSize         = 134217728 (128.0MB) ##perm区大小

MaxPermSize      = 134217728 (128.0MB) ##最大可分配perm区大小

Heap Usage: ##堆使用情况

New Generation (Eden + 1 Survivor Space):  ##新生代(伊甸区 + survior空间)

capacity = 241631232 (230.4375MB)  ##伊甸区容量

used     = 77776272 (74.17323303222656MB) ##已经使用大小

free     = 163854960 (156.26426696777344MB) ##剩余容量

32.188004570534986% used ##使用比例

Eden Space:  ##伊甸区

capacity = 214827008 (204.875MB) ##伊甸区容量

used     = 74442288 (70.99369812011719MB) ##伊甸区使用

free     = 140384720 (133.8813018798828MB) ##伊甸区当前剩余容量

34.65220164496263% used ##伊甸区使用情况

From Space: ##survior1区

capacity = 26804224 (25.5625MB) ##survior1区容量

used     = 3333984 (3.179534912109375MB) ##surviror1区已使用情况

free     = 23470240 (22.382965087890625MB) ##surviror1区剩余容量

12.43827838477995% used ##survior1区使用比例

To Space: ##survior2 区

capacity = 26804224 (25.5625MB) ##survior2区容量

used     = 0 (0.0MB) ##survior2区已使用情况

free     = 26804224 (25.5625MB) ##survior2区剩余容量

0.0% used ## survior2区使用比例

concurrent mark-sweep generation: ##老生代使用情况

capacity = 1879048192 (1792.0MB) ##老生代容量

used     = 30847928 (29.41887664794922MB) ##老生代已使用容量

free     = 1848200264 (1762.5811233520508MB) ##老生代剩余容量

1.6416783843721663% used ##老生代使用比例

Perm Generation: ##perm区使用情况

capacity = 134217728 (128.0MB) ##perm区容量

used     = 47303016 (45.111671447753906MB) ##perm区已使用容量

free     = 86914712 (82.8883285522461MB) ##perm区剩余容量

35.24349331855774% used ##perm区使用比例

Ø  -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.

$jmap–histo:live 3772

num     #instances         #bytes  class name

----------------------------------------------

1:         65220        9755240  <constMethodKlass>

2:         65220        8880384  <methodKlass>

3:         11721        8252112  [B

4:          6300        6784040  <constantPoolKlass>

5:         75224        6218208  [C

6:         93969        5163280  <symbolKlass>

7:          6300        4854440  <instanceKlassKlass>

8:          5482        4203152  <constantPoolCacheKlass>

9:         72097        2307104  java.lang.String

10:         15102        2289912  [I

11:          4089        2227728  <methodDataKlass>

12:         28887        1386576  org.apache.velocity.runtime.parser.Token

13:          6792         706368  java.lang.Class

14:          7445         638312  [Ljava.util.HashMap$Entry;

15:          8770         607040  [S

16:         17802         569664  java.lang.ref.WeakReference

17:          9538         472688  [[I

18:          8439         470440  [Ljava.lang.Object;

19:          5168         454784  java.lang.reflect.Method

20:         12559         401888  java.util.HashMap$Entry

21:          3730         358080  org.apache.velocity.runtime.parser.node.ASTReference

22:          4373         279872  org.apache.velocity.runtime.parser.node.ASTText

23:           463         270392  <objArrayKlassKlass>

24:          6695         267800  java.lang.ref.SoftReference

25:          5198         249504  java.util.HashMap

26:          2871         206712  org.apache.velocity.runtime.parser.node.ASTIdentifier

27:          7526         180624  org.apache.velocity.util.introspection.Info

28:          4441         177640  java.util.LinkedHashMap$Entry

29:          5550         177600  java.util.concurrent.locks.ReentrantLock$NonfairSync

30:          5723         175272  [Lorg.apache.velocity.runtime.parser.node.Node;

31:          4473         156904  [Ljava.lang.String;

32:          2773         155288  java.beans.MethodDescriptor

33:          6264         150336  java.util.ArrayList

Ø  -permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.

$jmap -permstat 3772

class_loader    classes bytes   parent_loader   alive?  type

<bootstrap>     2172    13144040          null          live    <internal>

0x00000007882d7ab8      0       0       0x0000000788106c00      dead    java/util/ResourceBundle$RBClassLoader@0x00000007f83b0388

0x0000000788c15ca8      1       3136    0x00000007880213d8      dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x0000000788fb1718      1       1968    0x00000007880213d8      dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x00000007882d0f08      1       2008    0x00000007880213d8      dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x0000000788176c60      1       3112    0x00000007880213d8      dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x0000000788a7e018      1       3144    0x00000007880213d8      dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x0000000788f515d0      1       1984    0x00000007880213d8      dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x000000078829a2c8      1       3112    0x00000007880213d8      dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x0000000788fab478      1       3128      null          dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x0000000788030fd8      1       3112    0x00000007880213d8      dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x0000000788d46048      1       3144    0x00000007880213d8      dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x000000078816f6f0      1       3144      null          dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

0x0000000788c18850      1       3112    0x00000007880213d8      dead    sun/reflect/DelegatingClassLoader@0x00000007f80686e0

Ø  -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

Ø  -h | -help 打印辅助信息

Ø  -J 传递参数给jmap启动的jvm.

参考文献:

http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html

http://blog.csdn.net/fenglibing/article/details/6411953

http://blog.csdn.net/zhaozheng7758/article/details/8623530

java性能监控工具:jmap命令详解的更多相关文章

  1. jvm 性能调优工具之 jmap 命令详解

    jmap名称:Java Memory Map(内存映射) 官方文档:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jmap.html ...

  2. Linux监控工具vmstat命令详解

        一.前言 很显然从名字中我们就可以知道vmstat是一个查看虚拟内存(Virtual Memory)使用状况的工具,但是怎样通过vmstat来发现系统中的瓶颈呢?在回答这个问题前,还是让我们回 ...

  3. 【JVM】jmap命令详解----查看JVM内存使用详情

    linux获取java进程PID: https://www.cnblogs.com/sxdcgaq8080/p/10734752.html 如果命令使用过程中报错,可能解决你问题的方案: https: ...

  4. jmap命令详解(转)

    1.命令基本概述 Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本.打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其 ...

  5. jmap命令详解

    1.命令基本概述 Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本.打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其 ...

  6. Java性能分析神器-JProfiler详解(一)(转)

    前段时间在给公司项目做性能分析,从简单的分析Log(GC log, postgrep log, hibernate statitistic),到通过AOP搜集软件运行数据,再到PET测试,感觉时间花了 ...

  7. Java性能分析神器-JProfiler详解(转)

    前段时间在给公司项目做性能分析,从简单的分析Log(GC log, postgrep log, hibernate statitistic),到通过AOP搜集软件运行数据,再到PET测试,感觉时间花了 ...

  8. linux iostat命令详解 磁盘操作监控工具

    Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视. 它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况. ...

  9. jvm 性能调优工具之 jps 命令详解

    JPS名称:jps - Java Virtual Machine Process Status Tool命令用法:jps [options] [hostid] options:命令选项,用来对输出格式 ...

随机推荐

  1. Objective-C:KVC机制

    KVC:key value coding    键值对的编码 功能:用来给对象属性设置值或者取出对象属性的值.虽然getter和setter方法也是该功能,但是如果类中没有设置属性特性或者重写这两个方 ...

  2. 从项目上一个子查询扩展学习开来:mysql的查询、子查询及连接查询

    上面这样的数据,想要的结果是:如果matchResult为2的话,代表是黑名单.同一个softId,version,pcInfoId的代表是同一个软件,需要去重:同时,如果相同软件里面只要有一个mat ...

  3. Spring框架学习(6)使用ioc注解方式配置bean

    内容源自:使用ioc注解方式配置bean context层 : 上下文环境/容器环境 applicationContext.xml 1 ioc注解功能 注解 简化xml文件配置 如 hibernate ...

  4. 【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解

    我们知道函数里面的参数实际上是一个以数组形式储存的对象 但它并非一个数组 如果我们要将它转换为数组可以调用Array.prototype.slice() 这个方法 分析一下这个方法: Array.pr ...

  5. ispy 编译笔记

    xcopy "$(ProjectDir)dlls\$(PlatformName)\*.*" "$(ProjectDir)$(OutDir)" /Y if NOT ...

  6. [ES6] 11. String Templates

    ECMAscript 6 lets us use string templates to gain a lot more control over strings in JavaScript. var ...

  7. HTTP状态码具体解释

    HTTP状态码(HTTP Status Code)是用以表示网页serverHTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 2817.RFC 229 ...

  8. 自开发实现Quartz Web管理

    网上能找到的QuartzWeb管理的资料都是使用的一个国外人写的Quartz WebApp的东东.功能也非常全面. 可是作为自己的应用其有用不了那么多功能,一般我们仅仅要能够定义一个job,指定一个C ...

  9. GObject对象系统

    http://www.ibm.com/developerworks/cn/linux/l-gobject/ 简单的说,GObject对象系统是一个建立在GLIB基础上的,用C语言完成的,具有跨平台特色 ...

  10. Unity3d 录像

    flashtd1: 回复 tqfa :我觉得是有方法可以实现的,之前使用高通的增强显示开发包时发现其实它是添加了一个类似movietexture的东西,叠加在它的摄像机上 如果文档里有操作moviet ...