【jmap】jmap命令详情

【jmap】jmap命令详情简介1、jmap能够打印给定Java进程、核心文件或远程DEBUG服务器的共享对象内存映射或堆内存的详细信息。2、如果给定的进程运行在64位虚拟机上,则必须指定-J-d64选项,例如jmap-J-d64-heappid。3、jmap可能在未来的JDK版本中删除。可用于内存溢出,泄露等

大家好,欢迎来到IT知识分享网。【jmap】jmap命令详情"

简介

1、jmap能够打印给定Java进程、核心文件或远程DEBUG服务器的共享对象内存映射或堆内存的详细信息。
2、如果给定的进程运行在64位虚拟机上,则必须指定 -J-d64选项,例如jmap -J-d64 -heap pid。
3、jmap可能在未来的JDK版本中删除。
可用于内存溢出,泄露等情况的内存分析

使用语法

<no option>

当不使用选项时,jmap打印共享对象映射。
对于加载到目标JVM中的每个共享对象,将打印其开始地址、映射大小和共享对象文件的完整路径。

-dump:[live,]format=b,file=

将Java堆以hprof二进制格式转储到filename文件中。

live是可选参数,如果指定,则只转储堆中的活动对象。

可以使用jhat (Java Heap Analysis Tool)工具来读取分析生产dump文件。

-heap

打印堆摘要 (可以看到新生代,老年代的内存占比等)

Attaching to process ID 327, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2147483648 (2048.0MB)
   NewSize                  = 357564416 (341.0MB)
   MaxNewSize               = 715653120 (682.5MB)
   OldSize                  = 716177408 (683.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 499646464 (476.5MB)
   used     = 49856184 (47.54656219482422MB)
   free     = 449790280 (428.9534378051758MB)
   9.978292171001934% used
From Space:
   capacity = 15204352 (14.5MB)
   used     = 0 (0.0MB)
   free     = 15204352 (14.5MB)
   0.0% used
To Space:
   capacity = 15204352 (14.5MB)
   used     = 0 (0.0MB)
   free     = 15204352 (14.5MB)
   0.0% used
PS Old Generation
   capacity = 1431830528 (1365.5MB)
   used     = 56643848 (54.01978302001953MB)
   free     = 1375186680 (1311.4802169799805MB)
   3.956044161114576% used

-histo[:live]
e.g. jmap -histo:live pid | head -20

打印堆的直方图。

对于每个Java类,将打印对象数量、内存大小(以字节为单位)和完全限定类名。

VM内部类名以’‘前缀打印,即打印出来的类名前带的是VM的内部类。

如果指定了live子选项,则只统计活动对象。

 num     #instances         #bytes  class name
----------------------------------------------
   1:        121998       15572640  [C
   2:          5456        4763856  [B
   3:         37391        3290408  java.lang.reflect.Method
   4:        102825        3290400  java.util.concurrent.ConcurrentHashMap$Node
   5:         25700        3203200  [Ljava.lang.Object;
   6:        120358        2888592  java.lang.String
   7:         16370        1820704  java.lang.Class

jmap -dump:live,format=b,file=/xxx/xx/x/dump.log

导出堆转储文件,可用于离线分析(但如果内存太大,可能会整个线程挂起,卡住动不了了)

参考:
https://zhuanlan.zhihu.com/p/475571429

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30997.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信