jvm-jmap(内存映像工具)的使用


上文:JVM-jinfo的使用


jmap:Java内存映像工具是什么?可以干什么?

    jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。

可以干什么?

java memory = direct memory(直接内存) + jvm memory(MaxPermSize +Xmx)

jmap的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。

实现

jvm-jmap(内存映像工具)的使用_第1张图片

查看进程的内存映像信息

打印出共享对象映射打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称。

jmap 20220

jvm-jmap(内存映像工具)的使用_第2张图片

对应 起始地址、映射大小、共享对象文件的路劲全称

查看Finalizer队列

打印等待终结的对象信息

jmap -finalizerinfo 20220

注意:这种只在Linux系统上面生效,在windows上面该命令查不出什么来。

jvm-jmap(内存映像工具)的使用_第3张图片

Number of objects pending for finalization: 0 证明当前等待队列为0

显示 Java 堆详细信息

注意:该查询会导致

jmap -heap 20220

jvm-jmap(内存映像工具)的使用_第4张图片

MinHeapFreeRatio        

-XX:MinHeapFreeRatio设置JVM堆最小空闲比率

MaxHeapFreeRatio        

-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率

MaxHeapSize

最大堆内存3972MB

NewSize

新生代默认大小 83MB

MaxNewSize

新生代最大大小为 1324MB

OldSize

老年代大小 167MB

NewRatio

新生代和老年代的大小比率 2

SurvivorRatio

年轻代中Eden和Survivor的比率 8

MetaspaceSize

元空间大小 20.796875MB

CompressedClassSpaceSize

如果开启了-XX:+UseCompressedOops及-XX:+UseCompressedClassesPointers(默认是开启),则UseCompressedOops会使用32-bit的offset来代表java object的引用,而UseCompressedClassPointers则使用32-bit的offset来代表64-bit进程中的class pointer;可以使用CompressedClassSpaceSize来设置这块的空间大小

MaxMetaspaceSize

最大元空间大小 1073741824

G1HeapRegionSize

G1收集器启用,一个Region的大小可以通过参数-XX:G1HeapRegionSize设定,取值范围从1M到32M,且是2的指数。

显示class的内存情况

jmap -histo 20220

jvm-jmap(内存映像工具)的使用_第5张图片

instances:实例数;

bytes:内存占用大小;

classs name:类名。

从大到小排序

jmap -histo:live 20220

jvm-jmap(内存映像工具)的使用_第6张图片

生成文件

jmap -histo:live 20220>D://hong.log

738de7e4abd45f1c7c6ff422342a195c.png

jvm-jmap(内存映像工具)的使用_第7张图片

打印类加载信息

jmap -clstats 20220

jvm-jmap(内存映像工具)的使用_第8张图片

打印Java堆内存的永久保存区域的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。

生成堆转储快照文件

注意:会暂停应用

jmap -dump:live,format=b,file=D://hong2.log 20220

参数:

option:选项参数,不可同时使用多个选项参数

pid:java进程id,命令ps -ef | grep java获取

executable:产生核心dump的java可执行文件

core:需要打印配置信息的核心文件

remote-hostname-or-ip:远程调试的主机名或ip

server-id:可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器

dda06721c5f02f1fe992df191e75b196.png

打开D盘中的文件。(这个文件在jhat中可以被分析)

jvm-jmap(内存映像工具)的使用_第9张图片

参考:

    https://blog.csdn.net/weixin_37335761/article/details/110506369

    https://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html

    https://docs.oracle.com/javase/9/tools/jmap.htm#JSWOR746

往期推荐

JVM-jinfo的使用

JVM-jstat(虚拟机统计信息监视工具)的使用

jvm的jps简单使用

jvm空间分配担保怎么回事?

jvm动态对象年龄判定

jvm参数PretenureSizeThreshold让对象直接进入老年代!

实战-配置+OmitStackTraceInFastThrow 导致不打印日志具体信息

jvm-jmap(内存映像工具)的使用_第10张图片

你可能感兴趣的:(虚拟机(JVM),linux,java,jvm,python,缓存)