jmap命令介绍

英文全称

Java Virtual Machine Memory Map 生成虚拟机的内存转储快照(heapdump)文件

jmap命令用于生产堆转储快照(一般称为heapdump或dump文件)。如果不使用jmap命令,要向获取Java堆转储快照还有一些比较”暴力“的手段:譬如-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常出现之后自动生生成dump文件,通过-XX:+HeapDumpOnCtrlBreak参数则可以使用[Ctrl]+[Break]键让虚拟机生成dump文件,又或者在Linux系统下通过Kill -3命令发送进程退出信号”恐吓“一下虚拟机,也能拿到dump文件。

jmap的作用并不仅仅是为了获取dump文件,它还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当前用的是那种收集器等。

命令格式

jmap [option] vmid

选项

option具体选项及作用如下:

  • -dump 生成Java堆转储快照。格式为:-dump:[live,]format=b,file=,其中live子参数说明是否只dump出存活的对象

  • -finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize()方法的对象。只在Linux/Solaris平台下有效

  • -heap 显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况等。只在Linux/Solaris平台下有效

  • -histo 显示堆中对象统计信息,包括类、实例数量和合计容量

  • -permstat 以ClassLoader为统计口径显示永久代内存状态。只在Linux/Solaris平台下有效

  • -F 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。只在Linux/Solaris平台下有效

示例

Tips :需要有JDK环境

  • -dump 生成java堆转储快照
[root@iZbp13vdh76h8tevitqolvZ jvm]# jps -l
8134 sun.tools.jps.Jps
25273 org.apache.catalina.startup.Bootstrap
1914 com.aliyun.tianji.cloudmonitor.Application
[root@iZbp13vdh76h8tevitqolvZ jvm]# jmap -dump:format=b,file=jmap.bin 25273
Dumping heap to /usr/local/learn/jvm/jmap.bin ...
Heap dump file created
[root@iZbp13vdh76h8tevitqolvZ jvm]# ll
total 29736
-rw------- 1 root root 30446864 Jun 17 08:49 jmap.bin

使用jmap生成一个正在运行的tomcat的dump快照文件的例子,25273为jps查询到的LVMID

  • -histo 显示堆中对象统计信息,包括类、实例数量和合计容量
[root@iZbp13vdh76h8tevitqolvZ ~]# jmap -histo 25273|more

 num     #instances         #bytes  class name
----------------------------------------------
   1:         19039        9157264  [B
   2:         35660        6488016  [C
   3:          7602        1003112  [I
   4:         34069         817656  java.lang.String
   5:         13756         550240  java.util.TreeMap$Entry
   6:         10135         405400  java.util.HashMap$KeyIterator
   7:          3172         362048  java.lang.Class
   8:         11184         357888  java.util.HashMap$Node
   9:          3518         309584  java.lang.reflect.Method
  10:          5149         232328  [Ljava.lang.String;
  11:          3409         214960  [Ljava.lang.Object;
  12:           959         157296  [Ljava.util.HashMap$Node;
  13:          4863         155616  java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
  14:          4402         140864  java.io.File
  15:          4190         134080  java.util.concurrent.ConcurrentHashMap$Node
  16:          2415          96600  java.util.HashMap$ValueIterator
  17:          4678          74848  java.lang.Object
  18:           967          69624  java.util.regex.Pattern
  19:          1613          64520  java.util.LinkedHashMap$Entry
  20:          1238          59424  java.util.HashMap
  21:          2415          57960  org.apache.catalina.LifecycleEvent
  22:           966          54096  [Ljava.util.regex.Pattern$GroupHead;
  23:          2192          52608  java.util.ArrayList
  24:          1293          51720  java.lang.ref.Finalizer
  25:          2415          50232  [Lorg.apache.catalina.Container;
  26:          2312          48520  [Ljava.lang.Class;
  27:           549          43920  java.lang.reflect.Constructor
  28:          1358          43456  java.util.Hashtable$Entry
  29:            60          42848  [Ljava.util.concurrent.ConcurrentHashMap$Node;
  30:           859          41232  org.apache.tomcat.util.modeler.AttributeInfo
  31:            10          41120  [Ljava.nio.ByteBuffer;
  32:           861          34440  java.lang.ref.SoftReference
  33:            30          31200  [[C
  34:           549          30744  java.util.zip.ZipFile$ZipFileInputStream
  35:           546          30576  java.util.zip.ZipFile$ZipFileInflaterInputStream
  36:           508          24384  java.util.TreeMap
  37:           968          23232  java.util.regex.Pattern$Single
  38:           967          23208  java.util.regex.Pattern$Start
  39:           966          23184  java.util.regex.Pattern$TreeInfo
  40:           841          20184  org.apache.tomcat.util.buf.StringCache$ByteEntry
  41:           966          19320  [Lorg.apache.catalina.startup.HostConfig$DeployedApplication;
  42:           601          19232  javax.management.MBeanAttributeInfo
  43:           379          18192  java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync
  44:           243          17496  org.apache.tomcat.util.net.jsse.openssl.Cipher
  45:           147          16464  sun.nio.ch.SocketChannelImpl
  • -heap 显示Java堆详细信息
[root@iZbp13vdh76h8tevitqolvZ jvm]# jmap -heap 25273|more 
Attaching to process ID 25273, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.66-b17

using thread-local object allocation.
Mark Sweep Compact GC

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 262144000 (250.0MB)
   NewSize                  = 5570560 (5.3125MB)
   MaxNewSize               = 87359488 (83.3125MB)
   OldSize                  = 11206656 (10.6875MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 8192000 (7.8125MB)
   used     = 5356200 (5.108070373535156MB)
   free     = 2835800 (2.7044296264648438MB)
   65.38330078125% used
Eden Space:
   capacity = 7340032 (7.0MB)
   used     = 5062472 (4.827949523925781MB)
   free     = 2277560 (2.1720504760742188MB)
   68.97070748465401% used
From Space:
   capacity = 851968 (0.8125MB)
   used     = 293728 (0.280120849609375MB)
   free     = 558240 (0.532379150390625MB)
   34.47641225961539% used
To Space:
   capacity = 851968 (0.8125MB)
   used     = 0 (0.0MB)
   free     = 851968 (0.8125MB)
   0.0% used
tenured generation:
   capacity = 17969152 (17.13671875MB)
   used     = 17702584 (16.88249969482422MB)
   free     = 266568 (0.25421905517578125MB)
   98.51652431901071% used
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值