在linux中怎么查看jvm堆内存大小,如何查看JVM运行的堆内存情况

《不可不知的7个JDK命令》介绍了些jdk自带的问题排查工具,机器出现CPU飙升的情况,此时就可以借助工具,排查应用端是否存在一些潜在问题。

jmap指令可以查看JVM运行的堆内存情况,

[test@localhost]> jmap -hUsage:jmap [option] (to connect to running process)jmap [option] (to connect to a core file)jmap [option] [server_id@](to connect to remote debug server)where is one of: to print same info as Solaris pmap-heap to print java heap summary-histo[:live] to print histogram of java object heap; if the "live"suboption is specified, only count live objects-permstat to print permanent generation statistics-finalizerinfo to print information on objects awaiting finalization-dump: to dump java heap in hprof binary formatdump-options:live dump only live objects; if not specified,all objects in the heap are dumped.format=b binary formatfile= dump heap to Example: jmap -dump:live,format=b,file=heap.bin -F force. Use with -dump: or -histoto force a heap dump or histogram when does notrespond. The "live" suboption is not supportedin this mode.-h | -help to print this help message-J to pass directly to the runtime system

通常,我们以hprof二进制格式dump堆的使用情况,相当于生成一个快照,然后分析这个快照文件,生成快照的指令,

[test@localhost]> jmap -dump:format=b,file=heap20200721.dump xxxxx(可以通过ps获取java进程pid号)Dumping heap to /opt/applog/heap20200721.dump ...Heap dump file created

在当前的路径,生成了dump文件,

-rw------- 1 jcf jcf 467M Jul 21 11:27 heap20200721.dump

然后下载文件,可以用Eclipse的MAT(Memory Analyzer)插件进行分析,如果不用插件,MAT可以直接下载,地址如下,

https://www.eclipse.org/mat/downloads.php

运行MemoryAnalyzer.exe,要求至少jdk1.8以上的环境,选择打开刚才下载的dump文件,

b04d979ba2a61dd25db2913ff057963c.png

等待一段时间,就可以看到统计图了,

784284c0c13c6a9890724d4439faa016.png

从生成的文件看其实是创建了一系列索引文件,在MAT中点击不同的选项时,应该就是从这些索引文件链接过来的,

86953146a184abf3cb7a8e01b372783e.png

例如,可以看下可能的泄露问题,点击饼图部分,就可以看到构成此问题的具体类,因为涉及细节,在此不做展示,

7e1e193af1b0d931b91235f809411d5f.png

通过MAT,还可以浏览以下相关信息,

System Properties

Thread Overview

Top Consumers

Class Histogram

其实,除了MAT,还有其他能看dump文件的工具,例如jdk自带的jhat,他可以分析堆,并将堆中对象以html的形式显示出来,支持对象查询语言OQL,操作更加粗暴,参数就是任意可用的端口和dump文件名,

[test@localhost]> jhat -port 9999 heap20200721.dumpReading from heap20200721.dump...Dump file created Tue Jul 21 11:27:12 CST 2020Snapshot read, resolving...Resolving 5995070 objects...WARNING: Failed to resolve object id 0xe2db5378 for field annotations (signature L)...(省略)WARNING: Failed to resolve object id 0xe195ce40 for field annotationDefault (signature L)Chasing references, expect 1199 dots.............................................................................................................................Eliminating duplicate references.............................................................................................................................Snapshot resolved.Started HTTP server on port 9999Server is ready.

通过浏览器,访问http://10.221.165.176:9999/,就打开了网页,他是按照报名进行的分组,

7ded0d60f2486197336dd7407179c13d.png

可以拉到网页的底部,支持各种检索的快捷链接,

57560b820c67a6d7522a536be059b4ca.png

例如QQL语言,可以用类SQL写出检索字符串长度超过100的实例,

ca0fcab598a3a43467e93f383b9a70d3.png

得到分析文件,其实只是个工具的使用问题,如何从这些零碎的信息中,得到问题真谛,这才是关键,让我这个小白,和大家一起继续学习了。

Java性能问题排查相关的历史文章,

近期的热文:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值