jmap:java内存映像工具

jmap:java内存映像工具

  jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或者dump文件)。如果不使用jmap命令,要想获取Java堆转储快照还有一些比较“暴力”的手段:譬如用 -XX:+HeapDumpOnOutMemoryError参数,可以让虚拟机在OOM异常出现之后自动生成dump文件,通过-XX:+HeapDumpOnCtrlBreak参数则可以使用[Ctrl]+[Break]键让虚拟机生成dump文件,又或者在Linux系统下通过Kill -3命令发送进程退出信号“恐吓”一下虚拟机,也能拿到dump文件。
  jmap的作用并不仅仅时为了获取dump文件,它还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。
  和jinfo命令一样,jmap有不少功能在windwos平台下都是受限的,除了生成dump文件的-dump选项和用于查看每个类的实例、空间占用统计的-histo选项所有操作系统都提供之外,其余选项都只能在Linux/Solaris下使用。
  jmap命令格式:
  jmap [option] vmid

参数说明
noneto print same info as Solaris pmap
-dump:<dump-options>生成Java堆转储快照。
dump参数说明:<table><tr><td>live</td><td>dump only live objects; if not specified,all objects in the heap are dumped.</td></tr><tr><td>format=b</td><td>binary format</td></tr><tr><td>file=FILE </td><td>dump heap to FILE</td></tr></table>Example: jmap -dump:live,format=b,file=heap.bin <pid>
-finalizerinfo显示在F-Queue中等待Finalizer线程执行的finalizer方法的对象。只在Linux/Solaris平台下有效
-heap显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况等。只在Linux和Solaris平台下有效
-histo显示Java堆中对象统计信息,包括类、实例数量和合计容量
-permstat以ClassLoader为统计口径显示永久代内存状态。只在Linux和Solaris平台下有效
-F当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。只在Linux和Solaris平台下有效
  • option 选项参数是互斥的(不可同时使用)。想要使用选项参数,直接跟在命令名称后即可。
  • pid 需要打印配置信息的进程ID。该进程必须是一个Java进程。想要获取运行的Java进程列表,你可以使用jps。
  • executable 产生核心dump的Java可执行文件。
  • core 需要打印配置信息的核心文件。
  • remote-hostname-or-IP 远程调试服务器的(请查看jsadebugd)主机名或IP地址。
  • server-id 可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。

  总结

  1. 如果程序内存不足或者频繁GC,很有可能存在内存泄露情况,这时候就要借助Java堆Dump查看对象的情况。
  2. 要制作堆Dump可以直接使用jvm自带的jmap命令
  3. 可以先使用jmap -heap命令查看堆的使用情况,看一下各个堆空间的占用情况。
  4. 使用jmap -histo:[live]查看堆内存中的对象的情况。如果有大量对象在持续被引用,并没有被释放掉,那就产生了内存泄露,就要结合代码,把不用的对象释放掉。
  5. 也可以使用 jmap -dump:format=b,file=<fileName>命令将堆信息保存到一个文件中,再借助jhat命令查看详细内容
  6. 在内存出现泄露、溢出或者其它前提条件下,建议多dump几次内存,把内存文件进行编号归档,便于后续内存整理分析。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值