我是靠谱客的博主 悦耳音响,最近开发中收集的这篇文章主要介绍分析Java程序内存溢出、内存不断增长的原因,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近发现服务器过一两天后内存就暴涨,百思不得其解,一番百度后找到以下解决方案,供大家参考!

  1. 下载Mat工具,并解压
    https://www.eclipse.org/mat/downloads.php
    进入网站下载对应服务器的软件,例如我下载后是MemoryAnalyzer-1.10.0.20200225-linux.gtk.x86_64.zip ,传到linux服务器后解压得到mat文件夹

  2. 根据pid导出指定java程序的内存镜像

# 使用ps命令找到在运行的java程序的进程id(pid)
ps -ef|grep `项目名`
# 根据上面找到的pid,使用以下命令导出内存镜像
jmap -dump:format=b,file=memory.dump `pid`
#执行后会得到 memory.dump 文件
  1. 使用解压后mat文件夹中ParseHeapDump.sh脚本分析 memory.dump
./ParseHeapDump.sh memory.dump  org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
  1. 一段时间后,会生成Leak_Suspects.zip、System_Overview.zip、Top_Components.zip 3个文件,一般分析Leak_Suspects.zip即可,将Leak_Suspects.zip导出到本地电脑,解压出来会生成静态html,访问index.html即可看到分析内容
    在这里插入图片描述
    如上图,找到占比最大的“嫌疑人”,点击Details查看明细,你就能分析到是哪个类,哪个功能导致的内存问题,像我这个是因为使用了阿里云的OSSClient之后没有执行shutdown方法,导致大量的内存占用。

总结:一般的内存问题,你可以先分析一下是不是使用了什么流没有关闭,比如文件读写的buffer,图片的处理,http的连接,如果还不能找到,直接使用上面eclipse提供的内存分析工具就能很直观的找到问题。

以上内容都是自身经历的总结,并不代表专业解答,如有不正确的请指正,希望能帮到大家,感谢阅读!

最后

以上就是悦耳音响为你收集整理的分析Java程序内存溢出、内存不断增长的原因的全部内容,希望文章能够帮你解决分析Java程序内存溢出、内存不断增长的原因所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部