MAT(java)内存分析工具技巧

常用的功能点:

Histogram:列出内存中每个实例的数量、大小、关联对象大小(注意单位为字节)

dominator tree(支配树):在此视图中列出了每个对象(Object Instance)与其引用关系的树状结构,同时包含了占用内存的大小和百分比

with outgoing references:查看当前对象,持有的对象信息

with incoming references:查看当前对象,被哪些对象持有

Shallow Heap表示对象本身占用内存的大小,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)的总和。

Retained Heap是该对象自己的Shallow Heap,并加上从该对象能直接或间接访问到对象的Shallow Heap之和。换句话说,Retained Heap是该对象GC之后所能回收到内存的总和。

thread overview:线程视图,展示堆内存中线程栈情况

 

Object Query Language (OQL) ,mat内置的对象查询语言,便于统计分析各种内存对象【注意,这里要结合对象占比、线程情况、异常类等综合判断,查询的结果也可以结合vim、excel等便于统计分析】

例:

根据线程等分析出如下的异常对象:

java.io.BufferedOutputStream    byte[]
com.mysql.jdbc.MysqlIO
com.mysql.jdbc.JDBC4Connection

 

OQL查询视图(F1查看语法):


100M  jdbc堆积大小
1.查看sql连接的用户
SELECT toString(s.user.value) FROM com.mysql.jdbc.JDBC4Connection s 

2.查看sql连接的语句
SELECT toString(s.buf) FROM java.io.BufferedOutputStream s 

3.查看redis.clients.jedis.Client对象的持有的对象信息   
SELECT toString(s.buf) FROM redis.clients.util.RedisOutputStream s 

SELECT toString(s.buf) FROM redis.clients.util.RedisOutputStream s WHERE (toString(s.buf).length() = 1024)

 

查看redis的inputstream的命中情况
SELECT toString(s.buf) FROM redis.clients.util.RedisInputStream s WHERE (toString(s.buf) LIKE "\+OK\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\..*")


3.查看redis的连接情况
SELECT s.port, toString(s.host) FROM redis.clients.jedis.HostAndPort s 


4.查看字节数组
SELECT  * FROM byte[] s
SELECT  * FROM byte[] s where toString(s).length() =1024

SELECT toString(s), s.@usedHeapSize,s.@retainedHeapSize FROM byte[] s WHERE (toString(s).length() = 1024)
 

SELECT toString(s), s.@usedHeapSize, s.@retainedHeapSize FROM byte[] s WHERE (s.@usedHeapSize = 8208)
*********21124个 8208字节    占内存160M+

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值