jvm
这个问题跟jvm是哪个厂商的有关,我们遇到比较多的应该是两类:
sun:
用jmap命令(pid代表java进程号)dump出来,然后用eclipsememoryanalyzer(这个网上可以下载到)可以打开:
jmap-dump:live,format=b,file=/tmp/dump.binpid
上面的方式可以看到瞬间的内存快照,引用关系。一般特别明显的内存不释放可以看出来。
其实还有另一种方式,直接在服务器上运行jmap-histo:livepid,运行多次,看哪个对象的数量是一直涨不减应该就有问题。如果代码看不出问题,可以结合上面的方式来定位是哪个引用没有释放。
ibm:
因为这边是用的sunjvm,以前服务器我们基本比较少接触,我记得以前他们是用kill-3命令来让jvmdump出内存,然后用IBMDumpAnalyzer(这个公司应该有,好像是有分版本)来分析,具体方法可以是单次dump找出那种不应该存在这么多数量的对象,如果不好找的话,也可以隔几秒钟再dump一次,两次来进行对比,哪些对象是一直增加不减少的,这种对象就是比较值得怀疑的对象。
相关推荐
voiletbin 2020-01-06
aotou 2012-01-10
IZZY 2012-01-10
FreedomCY 2014-07-20
suyouming 2019-01-21
bulargyzone 2016-10-17
Swen 2010-12-28
chessonloolu 2012-09-17
huangjing0 2019-06-28
jLawrencee 2012-08-18
雷潇 2019-01-22