案例 1: 某财险承保系统内存泄漏问题

简介: 案例 1: 某财险承保系统内存泄漏问题

一 内存泄漏情况说明

今天使用 Dynatrace 检查发现 callCenter 的应用存在内存泄漏的情况。具体如下:

在过去 6H 内,OLD 区内存使用量在持续增长,最终达到 99.98%。且大部分 OLD 区内存无法 GC。同时因频繁 GC,导致 JVM “STOP THE WORLD”的时间越来越大。严重影响业务性能。

对业务性能的影响如下图所示:

折线图是不包含挂起(stop the world)的响应时间,柱状图是包含挂起的响应时间。可以看到对业务的响应时间造成了一定的影响。

二 内存泄漏分析

使用 Dynatrace 分析结果如下:

  1. 确实存在内存泄漏。(相关资料可以在 Dynatrace 的下列路径中查看分析结果)
  2. 泄漏的实例主要是 ConcurrentHashMap”dubboLruCacheConcurrentHashMap 也是 dubboLRUcache调用的)如下图:
  3. 泄漏的根源如下:com.alibaba.dubbo.common.extension.ExtensionLoadercom.alibaba.dubbo.cache.support.lru.LruCacheFactory
  4. LRU 类的相关细节如下:

三 总结

综上,dubbo 的 LRU 相关的类导致了内存泄漏。

可能的原因有:LRU 缓存的 cache size 大小有问题;expire 时间有问题;或者是相关 cache 一直存在引用,导致无法 GC。

还请优化相关代码,避免出现内存泄漏的情况。

相关文章
|
2月前
|
存储 负载均衡 算法
负载均衡案例:如何只用2GB内存统计20亿个整数中出现次数最多的整数
负载均衡案例:如何只用2GB内存统计20亿个整数中出现次数最多的整数
32 2
|
3月前
|
监控 NoSQL Unix
内存泄漏专题(6)AIX系统内存泄漏调试浅探
内存泄漏专题(6)AIX系统内存泄漏调试浅探
39 0
|
5月前
|
Java
深入理解JVM系列教程(06) - 内存溢出与泄漏
深入理解JVM系列教程(06) - 内存溢出与泄漏
35 0
|
6月前
|
存储 编译器 Go
Go 语言内存逃逸案例
Go 语言内存逃逸案例
32 0
|
9月前
|
Java 关系型数据库 MySQL
19-案例实战剖析-日处理上亿数据的系统内存分析和优化
这是当时开发中遇到的一个真实场景,也是大部分人在开发项目中有可能会遇到的一些场景,该系统主要是做大数据相关计算分析的,日处理数据量在上亿的规模。这里我们重点针对JVM内存的管理来进行模型分析,数据的来源获取主要是MYSQL数据库以及其他数据源里提取大量的数据,通过加载到JVM内存的过程我们来一起分析出现的问题以及如何优化解决
69 0
19-案例实战剖析-日处理上亿数据的系统内存分析和优化
|
9月前
|
Java
项目实战典型案例20——内存长期占用导致系统慢
项目实战典型案例20——内存长期占用导致系统慢
54 0
|
9月前
|
Java
【项目实战典型案例】20.内存长期占用导致系统慢
【项目实战典型案例】20.内存长期占用导致系统慢
|
9月前
|
缓存 监控 算法
案例20-内存长期占用导致系统慢
内存长期占用导致系统慢
|
9月前
|
NoSQL 安全 Java
案例15-ArrayList线程不安全,共用全局变量导致数据错乱问题,占用内存情况
案例15-ArrayList线程不安全,共用全局变量导致数据错乱问题,占用内存情况

热门文章

最新文章