如何分析jvm的内存溢出

查看整个内存状况

jmap -heap [pid]

本地运行一个test程序后,找到对应java进程id,输入jmap时发生错误

如何分析jvm的内存溢出_第1张图片

发现是本地装了两个版本的jdk,需要进入到一个jdk的bin目录下执行jmap命令。

如何分析jvm的内存溢出_第2张图片


查看堆中对象详细占用情况

jmap -histo [pid]

如何分析jvm的内存溢出_第3张图片

导出整个JVM的dump文件

jmap -dump:format=b,file=文件名 [pid]

jhat是sun 1.6及以上版本中自带的一个用于分析JVM 堆DUMP 文件的工具,基于此工具可分析JVM HEAP 中对象的内存占用情况
jhat -J-Xmx1024M [file]

执行后等待console 中输入start HTTP server on port 7000 即可使用浏览器访问 IP:7000

如何分析jvm的内存溢出_第4张图片

打开浏览器,输入http://localhost:7000

如何分析jvm的内存溢出_第5张图片

如何分析jvm的内存溢出_第6张图片

点击show heap histogram

如何分析jvm的内存溢出_第7张图片

可以看出各个类的实例数量和使用的内存大小。

eclipse Memory Analyzer

Eclipse 提供的一个用于分析JVM 堆Dump文件的插件。借助这个插件可查看对象的内存占用状况,引用关系,分析内存泄露等。


查看堆栈信息

jstack [pid]

如何分析jvm的内存溢出_第8张图片

jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等。


你可能感兴趣的:(java)