浅谈JDK14性能管理工具之jmap和jhat
简介
jmap(Java Memory Map)是JDK自带的工具,用来将某个java程序的内存中的信息打印或者输出到文件中,然后通过jhat(Java Heap Analysis Tool)工具对输出的文件进行分析,从而找到可能出现的问题。
接下来进入我们的jmap和jhat之旅吧。
jmap
jmap -clstatsjmap有下面四个可用选项:
to connect to running process and print class loader statistics
jmap -finalizerinfo
to connect to running process and print information on objects awaiting finalization
jmap -histo[:[]]
to connect to running process and print histogram of java object heap
jmap -dump:
to connect to running process and dump java heap
clstats
clstats的全称叫做class loader statistics,用输出类加载有关的统计信息。
举一个例子:
jmap -clstats 8820输出结果如下:
文章图片
- Index - class的编号
- Super - 父类的编号
- InstBytes - 每个instance的bytes大小
- KlassBytes - 该class的bytes大小
- annotations - 注解大小
- CpAll - 每个class中constants, tags, cache, 和 operands的大小
- MethodCount - class中方法的个数
- Bytecodes - byte codes的大小
- MethodAll - method, CONSTMETHOD, stack map, 和 method data的大小
- ROAll - 可以放到read-only memory中的class元数据的大小
- RWAll - 可以放到read/write memory中的class元数据大小
- Total - ROAll + RWAll
- ClassName - class name
finalizerinfo列出准备finalization的对象。
jmap -finalizerinfo 8820如果没有对象等待被finalization,则会输出:
No instances waiting for finalization foundhisto
histo用来输出java heap对象的直方图。可以加一个live选项,用来输出live的对象。
jmap -histo:live 8820输出结果:
文章图片
num是对象的编号,instances是对象的个数,bytes是对象的大小,class name是对象的class名字。
dump
最后要讲一下dump,dump用于dump整个java heap,dump可以接三个参数:
- live - dump live对象
- format=b - 以hprof的二进制模式dump
- file=filename - dump对象到文件中
jmap -dump:live,file=dump.log 8820这里dump.log文件是非常大的,用肉眼也很难分析,下面我们介绍一下jhat(Java Heap Analysis Tool)命令来对dump出来的对象进行分析。
jhat 注意,jhat从JDK9的时候已经删除了(JEP 241: Remove the jhat Tool)。现在Oracle官方推荐的分析工具是Eclipse Memory Analyzer Tool (MAT) 和 VisualVM。 这两款工具后面有时间再详细讲解。
今天先使用JDK8中的jhat来分析一下上面dump出来的文件。
先看下jhat的命令格式:
【浅谈JDK14性能管理工具之jmap和jhat】Usage:jhat [-stack因为这个命令已经被废弃了,这里就不过多讲解它的参数,总体来说jhap会解析dump出来的文件,并在本地启动一个web服务器,我们可以通过web页面来查看dump出来的数据。默认情况下web服务器的端口是7000。] [-refs ] [-port ] [-baseline ] [-debug ] [-version] [-h|-help]
-JPass directly to the runtime system. For
example, -J-mx512m to use a maximum heap size of 512MB
-stack false:Turn off tracking object allocation call stack.
-refs false:Turn off tracking of references to objects
-port :Set the port for the HTTP server.Defaults to 7000
-exclude:Specify a file that lists data members that should
be excluded from the reachableFrom query.
-baseline: Specify a baseline object dump.Objects in
both heap dumps with the same ID and same class will
be marked as not being "new".
-debug:Set debug level.
0:No debug output
1:Debug hprof file parsing
2:Debug hprof file parsing, no server
jhat dump.log打开localhost:7000,我们可以看到首页展示的是各个包中的类的实例和地址信息:
Reading from dump.log...
Dump file created Mon May 11 21:13:43 CST 2020
Snapshot read, resolving...
Resolving 197989 objects...
Chasing references, expect 39 dots.......................................
Eliminating duplicate references.......................................
Snapshot resolved.
文章图片
点击首页的类的链接,可以跳转到类的具体信息页面:
文章图片
类的信息页面包含很多信息,包括父类,类加载器,签名,安全域,子类,实例,引用等详细信息。
对我们分析内存泄露和内存异常等情况非常有用。!
以上就是浅谈JDK14性能管理工具之jmap和jhat的详细内容,更多关于JDK14性能管理工具之jmap和jhat的资料请关注脚本之家其它相关文章!
推荐阅读
- 数据库|SQL行转列方式优化查询性能实践
- 性能测试中QPS和TPS的区别
- javascript|javascript 性能测试笔记
- 浅谈教育与医学之本质和医学生培养之三观
- 浅谈朋友圈
- 使用交叉点观察器延迟加载图像以提高性能
- golang锁竞争性能
- Linux性能分析-平均负载
- swoole打造高性能赛事直播平台1(准备工作)
- locust——python性能测试模块