jmap

JDK自带了一些工具可以帮助我们查看JVM运行的堆内存情况,常用的是jmap命令

查看 JVM 内存的几个工具,建议收藏!

打印堆的使用情况:

jmap -heap <pid>

查看 JVM 内存的几个工具,建议收藏!

那么,从这个输出中我们也可以大致看出堆的结构,分为Young Generation (年轻代) 和 Old Generation (老年代)

Young Generation又被划分为:Eden Space , From Space 和 To Space

可以看到这里To区是干净的,还未被使用,From区已经使用了95%了 

打印类的实例数量、占用的内存、类的名称,通常我们并不需要看所有的,只需要看前几条即可:

jmap -histo[:live] <pid> 

查看 JVM 内存的几个工具,建议收藏!

以hprof二进制格式dump堆的使用情况(PS:相当于生成一个快照,后续我们可以对这个快照文件进行分析):

jmap -dump:live,format=b,file=heap.bin <pid>  

查看 JVM 内存的几个工具,建议收藏!

另外,关注公众号Java技术栈,在后台回复:JVM46,可以获取一份 46 页的 JVM 教程,非常齐全。

Memory Analyzer (MAT)

文件dump下来以后,可以使用Eclipse的MAT插件进行查看

如果日常开发用的是eclipse的话,可以直接安装这个插件,如果不是的话,这个插件也可以独立运行

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

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

解压之后双击MemoryAnalyzer.exe即可运行

查看 JVM 内存的几个工具,建议收藏!

打开刚才的heap.bin文件

查看 JVM 内存的几个工具,建议收藏!

查看 JVM 内存的几个工具,建议收藏!

可以看到下面有三个选项卡,包括可以执行的操作和报表

先看第一个Histogram

查看 JVM 内存的几个工具,建议收藏!

由于这里是随便运行的一个工程,并没有出现内存泄漏之类的问题,所以这里看到的都是一些基础的java类

查看引用

查看 JVM 内存的几个工具,建议收藏!

Dominator Tree 可以看到biggest object以及它们所占内存的比例

查看 JVM 内存的几个工具,建议收藏!

我们一级一级的找,可以找到源文件,然后分析代码,最终定位到问题之根源

jconsole

可以查看本地的进程,也可以查看远程主机上的进程

查看 JVM 内存的几个工具,建议收藏!

例如:jconsole 192.168.102.16:9105

查看 JVM 内存的几个工具,建议收藏!

查看 JVM 内存的几个工具,建议收藏!

或者本地

查看 JVM 内存的几个工具,建议收藏!

其它

查看 JVM 内存的几个工具,建议收藏!

参考:

https://blog.csdn.net/xiaojia1100/article/details/78675960
https://www.cnblogs.com/kongzhongqijing/articles/3621163.html
https://blog.csdn.net/alli0968/article/details/52460008
https://blog.csdn.net/u011512180/article/details/51874097

作者:废物大师兄
来源:www.cnblogs.com/cjsblog/p/9561375.html

近期热文推荐:

1.Java 15 正式发布, 14 个新特性,刷新你的认知!!

2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!

3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。

4.吊打 Tomcat ,Undertow 性能很炸!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

相关文章: