1、问题:jar进程会随着时间由 30% 上涨到 70% 直到虚机报警。重启过后,还是会缓慢上涨:

进程数也在上涨:

2、在排查内存问题时,可能会使用的命令

1)查看 java 进程:jps -l 可以看到当前进程号为 1

2)查看对上内存的使用情况:

/usr/java/jdk1.8.0_161/bin/jmap -heap 1

3)pmap -x 1

4)jstat -gc 1

5)导出堆栈信息:jmap -dump:format=b,file=/qae/log/dump.dat

2、将上面 5)中导出的堆栈文件,使用 MemoryAnalyzer.exe 打开:

3、通过 mat 的泄漏分析中,可以看到有两个问题,其中第一个可以大概猜出是 JPA的相关数据库操作导致的泄漏,点开 detail 继续分析:

另一个是 java.beans.ThreadGroupContext 泄漏

4、点开上面问题1 的 detail 按钮,依次查看各个对象,以及对象中的值:

目前基本能够判断,该内存泄漏是由 jpa 中的 findAll()导致的,相关代码:

5、通过 google 搜索  JAP  query plan cache 相关的泄漏问题,找到帖子:

大致意思是:

基本上归结为在IN子句中具有可变数量的值,而Hibernate试图缓存这些查询计划:

Hibernate缓存这些解析的HQL查询。具体来说,Hibernate SessionFactoryImpl包含带有queryPlanCache和parameterMetadataCache的QueryPlanCache。

但是当插入子句的参数数量很大并且变化时,这被证明是一个问题。hibernate.query.plan_cache_max_size,默认为2048(对于具有许多参数的查询而言,这个属性太大)。

由于hibernate中存在一些模糊的错误,有些情况下参数未正确处理并被呈现到JPQL查询中(作为示例,请查看HHH-6280)。如果您的查询受到此类缺陷的影响并且以高速执行,

则会破坏您的查询计划缓存,因为生成的每个JPQL查询几乎都是唯一的(例如,包含您的实体的ID)

6、根据上面帖子的建议,将缓存计划的值改小:

7、上线后,重启应用,经过一段时间运行,基本维持在 36%:

8、另外,可以通过直方图(Histogram)查看内存中的主要内存对象:

排除掉虚引用、弱引用、软引用:

java 内存泄露对象排查_记录一次 java内存泄漏的排查相关推荐

  1. linux pmap 内存泄露,pmap学习:系统测试中怎么确定内存泄露(memory leak)

    性能测试的一项重要工作就是检查有没有内存泄露.linux下通过top/free/pmap/ps,会提供许多关于内存分配的信息,如top里面的VIRT,RSS,SWAP,VSZ,RES,SHR等等,到底 ...

  2. java方法区对象类型_浅谈Java内存区域与对象创建过程

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...

  3. java查看对象地址_如何获取到JAVA对象所在的内存地址

    展开全部 1.首先打开java构造方法代码. 2.接下来就可以获得网卡物理地址方法代码. 3.然32313133353236313431303231363533e4b893e5b19e31333431 ...

  4. java字面量 方法区_(一)java的内存模型

    程序计数器(私有) 程序计数器:"是一个非常小的内存空间,用来保证程序依次执行",它可以看作是当前线程所执行的字节码的行号指示器 由于java虚拟机的多线程是通过线程轮流切换并分配 ...

  5. java 字符串是对象吗_解析Java中的String对象的数据类型

    解析Java中的String对象的数据类型 2007-06-06 eNet&Ciweek 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所 ...

  6. 内存泄露严重吗_内存泄漏–测量频率和严重性

    内存泄露严重吗 这篇文章是我们开放文化的一部分-我们将继续分享日常工作中的见解. 这次,我们窥视了我们价值主张的核心,即–寻找以下问题的答案: Java应用程序中内存泄漏多久发生一次? 内存泄漏有多大 ...

  7. java 堆_Java 对象都是在堆上分配内存吗?

    为了防止歧义,可以换个说法:Java对象实例和数组元素都是在堆上分配内存的吗? 答:不一定.满足特定条件时,它们可以在(虚拟机)栈上分配内存. JVM内存结构很重要,多多复习 这和我们平时的理解可能有 ...

  8. java 获取spring对象数组_解析Java中如何获取Spring中配置的bean

    解析Java中如何获取Spring中配置的bean Java中如何获取Spring中配置的bean?下面是由百分网小编为大家整理的解析Java中如何获取Spring中配置的bean,喜欢的可以收藏一下 ...

  9. window服务器cpu过高的排查_生产服务器CPU占用率过高排查过程

    一.问题详情 现象:API接口访问耗时过长,排查发现当前节点内存使用3.9G,CPU占用率295%. 当前节点已两周没发版,怀疑内存没有释放,可能是JVM垃圾回收的问题. 二.排查过程 1.定位问题进 ...

最新文章

  1. 如何评估两张图片的差异
  2. 适合所有尺寸打印马赛克
  3. 阿里云发布三大人工智能产品:推动AI产业落地
  4. oracle 自定义函数
  5. 欢迎光临CAX软件二次开发开源社区!
  6. 3.SFB标准版前端安装
  7. 数据库连接池的设计思路及java实现
  8. Java面向对象之抽象方法抽象类、接口的使用
  9. java excel .do_Java Excel
  10. 字节跳动2019春招笔试——找零(JavaScript)
  11. java游戏抽卡_怎么处理游戏中抽卡概率算法,每个卡有数量限制,抽完概率也会变。...
  12. 解决跨域form表单post提交时Forbidden的问题。
  13. 编译android源码 太慢,记编译Android源码的经历
  14. C++深度探索系列:智能指针(Smart Pointer) [一] (转)
  15. 1.微信开放平台 和 微信公众平台 和 商户平台 的区别
  16. 2022.11.12 英语背诵
  17. GitHub爆火 金九银十巨作:拼多多/蚂蚁/百度面经分享
  18. 柠檬班的课程怎么样,来自一个金融行业转行到软件测试行业的故事
  19. 【温故知新】—— React/Redux/React-router4基础知识独立团Demo
  20. 春运又双叒来啦!阿里出手帮你抢票

热门文章

  1. 洛谷 P1070 道路游戏(noip 2009 普及组 第四题)
  2. Python id() 函数
  3. 测试我自己的系统是大端还是小端
  4. 微信小程序实战篇-分类页面制作
  5. redis 配置文件 append only file(aof)部分---数据持久化
  6. **23.m阶的B-树和B+树的主要区别
  7. 计算机视觉之人脸检测相关Paper资源汇总
  8. 大学毕业后八大让你加班成狗专业盘点,你的专业上榜了嘛?
  9. yum安装mysql驱动_centos7下使用yum安装mysql
  10. 接口中可以有静态方法吗?