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

 更新时间:2020年11月24日 09:50:00   作者:西北偏北  
这篇文章主要介绍了排查Java应用内存泄漏问题的步骤,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下

什么是内存泄漏

内存泄漏是指java应用的堆内存使用率持续升高,直至内存溢出。
内存泄漏的的原因可能有多种

  • 分配给应用程序的内存本身过小。而应用的业务代码,确实需要生成大量的对象
  • 代码bug,某些需要被回收的对象,由于代码bug,却持续的被引用,导致java虚拟机无法回收这些对象。从而撑爆内存

无论哪种内存泄露,我们的解决方法都是要定位到具体是什么对象,占用了大量内存,从而方便我们基于此进行代码分析,debug,找出代码问题。
而能够帮助我们实现这一目的的方式就是获取java应用的内存 dump

如何获取内存dump

使用命令获取jcmd

首先需要获取java 进程id,获取到java进程后
使用命令

jcmd <pid> GC.heap_dump <file-path>

如果执行报错

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 <pid> GC.heap_dump <file-path>

如果应用在本地

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

程序异常退出时自动dump

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

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<file-or-dir-path>

如何分析内存dump

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

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

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

相关文章

  • 一文探索Apache HttpClient如何设定超时时间

    一文探索Apache HttpClient如何设定超时时间

    Apache HttpClient是一个流行的Java库,用于发送HTTP请求,这篇文章主要为大家介绍了Apache HttpClient如何设定超时时间,感兴趣的小伙伴可以学习一下
    2023-10-10
  • Java实现飞机航班管理系统的思路详解

    Java实现飞机航班管理系统的思路详解

    这篇文章主要介绍了Java实现飞机航班管理系统的思路详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Java8简单了解Lambda表达式与函数式接口

    Java8简单了解Lambda表达式与函数式接口

    这篇文章主要介绍了Java8简单了解Lambda表达式与函数式接口,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 运行Jar包出现提示xxx中没有主清单属性报错问题解决方法

    运行Jar包出现提示xxx中没有主清单属性报错问题解决方法

    这篇文章主要介绍了运行Jar包出现:xxx中没有主清单属性报错,当出现报错:xxx中没有主清单属性,解决方法也很简单,在pom.xml配置中,加上相应配置即可,需要的朋友可以参考下
    2023-08-08
  • VScode+Java配置与使用的详细步骤

    VScode+Java配置与使用的详细步骤

    这篇文章主要介绍了VS code+Java配置与使用的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 关于SpringBoot简介、官网构建、快速启动的问题

    关于SpringBoot简介、官网构建、快速启动的问题

    SpringBoot 是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程,这篇文章主要介绍了SpringBoot简介、官网构建、快速启动,需要的朋友可以参考下
    2022-07-07
  • BaseJDBC和CRUDDAO的写法实例代码

    BaseJDBC和CRUDDAO的写法实例代码

    这篇文章主要介绍了BaseJDBC和CRUDDAO的写法实例代码,代码注释十分详细,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • mybatis 忽略实体对象的某个属性(2种方式)

    mybatis 忽略实体对象的某个属性(2种方式)

    这篇文章主要介绍了mybatis 忽略实体对象的某个属性方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • mybatis-plus常用注解@TableId和@TableField的用法

    mybatis-plus常用注解@TableId和@TableField的用法

    本文主要介绍了mybatis-plus常用注解@TableId和@TableField的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • JAVA项目如何打包部署到Linux服务器上

    JAVA项目如何打包部署到Linux服务器上

    本文详细介绍了在服务器上部署环境包括JDK、MySQL、Tomcat的设置,以及使用Idea-Maven-SpringBoot进行jar包打包部署的流程,内容涵盖了MySQL配置注意事项、pom.xml配置、打包命令等关键步骤,同时,也提供了如何将jar包上传到Linux服务器并运行的具体方法
    2024-10-10

最新评论