这篇文章主要介绍“如何排查服务器的内存泄露”,在日常操作中,相信很多人在如何排查服务器的内存泄露问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何排查服务器的内存泄露”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
jps -l
查看虚拟机属于哪个进程
jstat -gcutil 20954 1000
新生代Eden区(E,表示Eden)使用了28.30%(最后)的空间,
两个Survivor区(S0、S1,表示Survivor0、Survivor1)分别是0和8.93%,
老年代(O,表示Old)使用了87.33%。
程序运行以来共发生Minor GC(YGC,表示Young GC)101次,总耗时1.961秒,
发生Full GC(FGC,表示Full GC)7次,Full GC总耗时3.022秒,
总的耗时(GCT,表示GC Time)为4.983秒。
每1000毫秒查询一次,一直查。
gcutil的意思是已使用空间站总空间的百分比。
查询结果表明:这台服务器的
jmap -histo:live 20954
可以看出HashTable中的元素有5000多万,占用内存大约1.5G的样子。这肯定不正常。
live 是可选参数,代表存活的对象
红线部分:
Shortest Paths To the Accumulation Point表示GC root到内存消耗聚集点的最短路径
All Accumulated Objects by Class列举了该对象所存储的所有内容
为了找到内存泄露,我获取了两个堆转储文件,两个文件获取时间间隔是一天
对比两个文件的对象,通过对比后的结果可以很方便定位内存泄露。
MAT同时打开两个堆转储文件,分别打开Histogram
在下图中方框1按钮用于对比两个Histogram,对比后在方框2处选择Group By package,然后对比各对象的变化
-64的意思是,俩文件中该对象比对,前者比后者少了64个
我内存泄露位置是一个list,这个list只在这里一直不停的往里添加eventInfo对象,却没有释放过。
从中找你熟悉的代码
同时也会从首页跳转到Leak Suspects页面
jmap -dump:format=b,file=<dumpfile.hprof> <pid>
MemoryAnalyzer.ini文件
Xmx参数,该参数表示最大内存占用量,默认为1024m
jmap比较笼统,明显的问题能检查出来
从jmap获取 .hprof 文件
选择Leak Suspects Report, Finish就可以进入MAT分析页面的首页
在首页上比较有用的是Histogram和Leak Suspects
点击Leak Suspects会在堆转储文件同目录内生成一个Leak Suspects.zip文件,
解压该文件后可以通过浏览器打开分析结果
Leak Suspects页面
点击Details进入详情页面
到此,关于“如何排查服务器的内存泄露”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。