如何排查服务器的内存泄露

这篇文章主要介绍“如何排查服务器的内存泄露”,在日常操作中,相信很多人在如何排查服务器的内存泄露问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何排查服务器的内存泄露”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

网站的建设成都创新互联专注网站定制,经验丰富,不做模板,主营网站定制开发.小程序定制开发,H5页面制作!给你焕然一新的设计体验!已为成都岗亭等企业提供专业服务。

  • 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 是可选参数,代表存活的对象

    • 如何排查服务器的内存泄露

    • 红线部分:

  • MAT 分析工具

    • 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=

    • MemoryAnalyzer.ini文件

    • Xmx参数,该参数表示最大内存占用量,默认为1024m

    • jmap比较笼统,明显的问题能检查出来

    • 补充jmap在线分析

    • 修改MAT配置

    • 从jmap获取 .hprof 文件

    • 选择Leak Suspects Report, Finish就可以进入MAT分析页面的首页

    • 在首页上比较有用的是Histogram和Leak Suspects

    • 点击Leak Suspects会在堆转储文件同目录内生成一个Leak Suspects.zip文件,

    • 解压该文件后可以通过浏览器打开分析结果

    • Leak Suspects页面

    • 点击Details进入详情页面

    到此,关于“如何排查服务器的内存泄露”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


    文章名称:如何排查服务器的内存泄露
    文章URL:http://ybzwz.com/article/igpidh.html