JVM 调优实战--jmap的使用以及内存溢出分析

目录


jmap的使用以及内存溢出分析

查看内存使用情况

查看内存中对象数量及大小

将内存使用情况dump到文件中

通过jhat对dump文件进行分析

通过MAT工具对dump文件进行分析

MAT介绍

MAT下载安装

MAT使用步骤 


jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

查看内存使用情况

查看tomcat的内存使用情况:jmap -heap tomcat进程ID

JVM 调优实战--jmap的使用以及内存溢出分析

①查看堆内存配置信息:

JVM 调优实战--jmap的使用以及内存溢出分析

②查看堆内存使用情况:

JVM 调优实战--jmap的使用以及内存溢出分析

查看内存中对象数量及大小

使用 jmap -histo 进程ID | more 查看对象数量及大小。在Linux系统中,可以使用管道 | more来一段一段地输出信息。Windows系统也可以使用。

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

使用 jmap -histo:live 进程ID | more 可以查看活跃的对象数量及大小:

JVM 调优实战--jmap的使用以及内存溢出分析

将内存使用情况dump到文件中

JVM 调优实战--jmap的使用以及内存溢出分析

dump下来的文件是二进制格式的。 

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

通过jhat对dump文件进行分析

将jvm的内存dump到文件中,这个文件是一个二进制的文件,不方便查看,这时我们可以借助jhat工具进行查看:

JVM 调优实战--jmap的使用以及内存溢出分析

通过浏览器访问9999端口就可以访问到dump下来的文件信息了:

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

页面的最下方提供OQL查询链接:

查询链接  http://xxx:9999/oql/

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

OQL查询语句示例(可以通过OQL Help来查看一些语句示例):

JVM 调优实战--jmap的使用以及内存溢出分析

如查询长度>=100 的字符串有哪些:

select s from java.lang.String s where s.value.length >= 100

JVM 调优实战--jmap的使用以及内存溢出分析

可以看到长度大于1000的字符串是一些配置文件如web.xml之类的:

说明配置文件是以一个字符串的形式加载到内存中的。

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

通过MAT工具对dump文件进行分析

MAT介绍

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

MAT下载安装

JVM 调优实战--jmap的使用以及内存溢出分析

双击运行:

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

MAT使用步骤 

使用步骤:

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析

JVM 调优实战--jmap的使用以及内存溢出分析