什么是内存泄漏

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

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

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

无论哪种内存泄露,我们的解决方法都是要定位到具体是什么对象,占用了大量内存,从而方便我们基于此进行代码分析,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:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=

如何分析内存dump

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

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

参考资料

欢迎关注我的个人公众号"西北偏北UP",记录代码人生,行业思考,科技评论

dump排查内存异常 java_如何排查Java应用内存泄漏问题相关推荐

  1. 华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历

    摘要:华为云数据库GaussDB(for Cassandra) 是一款基于计算存储分离架构,兼容Cassandra生态的云原生NoSQL数据库:它依靠共享存储池实现了强一致,保证数据的安全可靠. 本文 ...

  2. java堆栈内存_关于 js 与 Java 堆栈内存的一些疑惑

    最近学习中遇到了些疑惑,希望 v2 各位大牛解惑. 先说 js ,限定在 ES5 讨论.在 js 中对象是存在堆内存中的,变量只是个引用,那对象的属性是存在哪的呢,假设该属性是个数字 3 ,函数作用域 ...

  3. linux 修改 java 内存_Linux 和 Windows修改Java虚拟机内存大小

    因为内存溢出问题 1. Linux下直接修改%tomcat_home%/bin/catalina.sh文件 在注释下紧接一行也就是脚本正文开始之前 加上 Java_OPTS='-server -Xms ...

  4. JVM:JVM内存结构、内存溢出及简单排查思路

    1.JVM内存结构 JVM 的运行时数据区主要包括:堆.栈.方法区.程序计数器等 1.1.程序计数器(PC寄存器) 程序计数器(Program Counter Register)是一块较小的内存空间, ...

  5. 模拟JAVA堆内存溢出和栈内存溢出

    文章目录 1. 模拟堆内存溢出 2. 模拟栈内存溢出 1. 模拟堆内存溢出 为了更快的出现堆内存溢出,可以限制Java堆的大小为10MB(不限制也可以).代码如下(可直接复制使用): package ...

  6. Java的内存模型,java初级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  7. Java 堆内存分析

    Java 堆内存工具jmap 打印当前 Java 堆内存信息 jmap -histo[:live] <pid> # 打印当前进程中类实例信息 导出Java 堆内存到文件 jmap -dum ...

  8. Java的内存回收机制

    在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险.但是,也正 ...

  9. java——JMM内存模型

    目录 简介 三大特性 volatile关键字 简介 JMM内存模型,也称为Java多线程内存模型.它和cpu缓存模型类似,是基于cpu缓存模型来建立. cpu缓存模型: java内存模型: 当Java ...

最新文章

  1. 解决.NET 4.0下无法直接运行.NET 2.0程序的问题
  2. 异步爬虫(爬取小说30秒12MB!)Python实现
  3. jQuery Validate 提交表单验证失败扩展方法
  4. Confluence 6 附件存储文件系统的分级
  5. ssm把后端数据传到前端_前端传数据到后台分别JSON和STRING接收 AJAX SPRINGBOOT ssm
  6. 中科院单细胞分析算法开发博士带你做单细胞转录组分析
  7. ProjectEuler 5
  8. 还在用全部token训练ViT?清华UCLA提出token的动态稀疏化采样,降低inference时的计算量...
  9. 查看mysql连接数_查看mysql 连接数
  10. 前端-微信浏览器无法下载附件解决方法?
  11. 大唐杯 5G协议与信令 任务六、任务七(24:30-35:00)
  12. 《北京市住房租赁条例》
  13. [高级]pdf生成(可水印)、pdf预览(可分页)、pdf打印:全栈一条龙方案
  14. Salesforce基础知识学习Day05
  15. qt之QSqlQuery类执行SQL语句
  16. matlab 沃尔什,Walsh-Hadamard 变换
  17. 如何使用CC协议声明
  18. 花了几万写了一份几十页的商业计划书投资人会看吗?
  19. SpringBoot后端生成漂亮美观的验证码图片
  20. Java 字符串数组转化为对象

热门文章

  1. HALCON 20.11:深度学习笔记(7)---术语表
  2. 小程序wx.getRecorderManager()录音管理
  3. Python模块-decimal
  4. 为IoT应用搭建DevOps管道
  5. web.xml文件中mime-mapping
  6. [原]Unity3D深入浅出 - 新版粒子系统 (Shuriken)
  7. 开学了,一切都要开始了!
  8. antd 日期时间选择_【UI设计】日期选择器的常见样式总结
  9. byte用json存 c++_.NET Core 3.1中的Json互操作最全解读收藏级
  10. k1658停运到什么时候_2021年春运就要开始啦!快来看看各大快递的停运时间吧