导航:首页 > 编程语言 > dumpjava内存

dumpjava内存

发布时间:2025-03-10 00:44:19

⑴ 如何通过mat从java内存mp中找到缓存对象中的所有字符串

生成java内存mp文件

标准做法,jmap mp,需要sudo权限,另外jmap指定的mp文件一定要是启动服务的用户可写,比如可以新创建一个文件夹

sudo mkdir /home/q/memmp
sudo chown resin:resin /home/q/memmp

sudo -u resin /home/q/java/default/bin/jmap -mp:live,format=b,file=/home/q/memmp/memMap.20130527.hprof ${pid}

把mp文件拿到本地

把mp文件压缩下,否则会很大,scp到本地

安装mat

直接在eclipse里:

1.Help->Install New Software

2.输入update site: http://download.eclipse.org/mat/1.2/update-site/,然后一直next就行了,安装完重启eclipse

3.最好创建一个单独的workspace来放内存mp文件

把mp文件导入mat

1.打开eclipse,选择上一步你创建的存放内存mp文件的workspace,我本机上是~/mat
2.打开刚才拿到本地的mp文件,然后等着mat解析就完了,注意这时候你可能需要修改eclipse安装文件下的eclipse.ini,调整下eclipse的jvm参数(xms和xmx),把heap调大些,否则解析过程会报OOM

3.解析完后会生成一个Overview,我们一般会选择org.apache.catalina.loader.WebappClassLoader,作为分析top
consumer的切入点,这是tomcat上web应用的classloader

4.单击饼图上org.apache.catalina.loader.WebappClassLoader的区域,会出现一个弹出菜单,选择List
Objects->with incoming references,因为所有的web应用内的对象都会引用它们自己的class
loader,也就是org.apache.catalina.loader.WebappClassLoader
5.得到如下所示列表,单击retained heap这个tab标签可以排序,选择按照占用内存的大小倒排序,得到了top memory
consumers列表

定位缓存对象

我们关心的是top consumer里的RtTreeCache里,有多少重复房型,怎么得到的呢,follow the steps:

1.查看RtTreeCache对象的outgoing
reference,因为我们需要看这个对象里面的属性,属性对象也就是RtTreeCache对象引用的对象,也就是outgoing reference

2.找到我们需要分析的数据在对象结构中的位置

3.可以看到我们要查找的目标是RtTreeCache对象下的所有HotelRtTree对象的rtReverseMap对象属性下的table数组内所有entry的key,我们接下来就看看怎么把这个冗长的关系转化成一个简单的OQL语句

写MAT OQL

OQL是MAT里的一个内嵌查询语言,它的官方描述很形象:
Memory Analyzer has a built-in object query
language (OQL) that allows to query the heap mp with custom SQL-like queries. Just
think of classes as tables, objects as rows, and fields as columns.

总结

jmap + mat是我们分析java内存的利器,而通过mat
oql,我们可以从mp文件里提取出更多的类似于有多少内容相同的不同字符串对象等信息来帮助我们做技术决策。

阅读全文

与dumpjava内存相关的资料

热点内容
压缩机功率型号 浏览:559
PLC程序算法 浏览:971
物流程序员好不好 浏览:546
插值算法vb 浏览:928
androidwebview报错 浏览:241
中国什么时候才能有自己的服务器 浏览:764
ps3联机服务器怎么用 浏览:670
服务器nfs服务是什么 浏览:95
java虚拟机直接编译 浏览:608
javaaop实现 浏览:61
java双向通信 浏览:513
mps430超低功耗单片机答案 浏览:905
夫妻数学算法中大奖 浏览:399
nmake不是内部命令 浏览:779
如何创建社区ppoe虚拟服务器 浏览:520
java模拟线程并发 浏览:762
一个云服务器能有几个实例 浏览:191
如何在服务器压缩zip格式 浏览:87
去除数组中重复元素的算法 浏览:1002
巴士之星安卓如何玩 浏览:656