排查Java应用内存泄漏问题的步骤

网友投稿 257 2023-02-18

排查Java应用内存泄漏问题的步骤

什么是内存泄漏

内存泄漏是指java应用的堆内存使用率持续升高,直至内存溢出。

内存泄漏的的原因可能有多种

分配给应用程序的内存本身过小。而应用的业务代码,确实需要生成大量的对象

代码bug,某些需要被回收的对象,由于代码bug,却持续的被引用,导致java虚拟机无法回收这些对象。从而撑爆内存

无论哪种内存泄露,我们的解决方法都是要定位到具体是什么对象,占用了大量内存,从而方便我们基于此进行代码http://分析,debug,找出代码问题。

而能够帮助我们实现这一目的的方式就是获取java应用的内存 dump

如何获取内存dump

使用命令获取jcmd

首先需要获取java 进程id,获取到java进程后

使用命令

jcmd GC.heap_dump

如果执行报错

com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded

一般是由于执行jcmd的用户同java应用本身不是同一个用户。解决办法是切换到应用对应的用户下再执行上述命令

sudo -u [userid] /jcmd GC.heap_dump

如果应用在本地

如果应用是在本地,除了用上述方法外,还可以用JVisualVM 、JConsole

程序异常退出时自动dump

但更为重要的,为了准确还原应用故障的现场,最好通过指定java 执行参数,在程序出错时,自动dump

java -XX:+HeapDumpOnOSDcrsutOfMemoryError -XX:HeapDumpPath=

如何分析内存dump

获取到dump文件后,需要使用eclipse.org 出品的 Memory Analyzer 工具。使用其中的Dominator Tree,查看各对象的内存占用情况

找出占用内存最多的对象及其类信息

以上就是排查Java应用内存泄漏问题的步骤的详细内容,更多关于Java应用内存泄漏的资料请关注我们其它相关文章!

如果应用在本地

如果应用是在本地,除了用上述方法外,还可以用JVisualVM 、JConsole

程序异常退出时自动dump

但更为重要的,为了准确还原应用故障的现场,最好通过指定java 执行参数,在程序出错时,自动dump

java -XX:+HeapDumpOnOSDcrsutOfMemoryError -XX:HeapDumpPath=

如何分析内存dump

获取到dump文件后,需要使用eclipse.org 出品的 Memory Analyzer 工具。使用其中的Dominator Tree,查看各对象的内存占用情况

找出占用内存最多的对象及其类信息

以上就是排查Java应用内存泄漏问题的步骤的详细内容,更多关于Java应用内存泄漏的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SonarQube安装、配置与使用教程图解
下一篇:Jenkins插件pipeline原理及使用方法解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~