案例 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。

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

相关文章
|
Java
深入理解JVM系列教程(06) - 内存溢出与泄漏
深入理解JVM系列教程(06) - 内存溢出与泄漏
59 0
|
存储 编译器 Go
Go 语言内存逃逸案例
Go 语言内存逃逸案例
58 0
|
2月前
|
NoSQL 程序员 Linux
轻踩一下就崩溃吗——踩内存案例分析
踩内存问题分析成本较高,尤其是低概率问题困难更大。本文详细分析并还原了两个由于动态库全局符号介入机制(it's a feature, not a bug)触发的踩内存案例。
|
4月前
|
Java 运维
开发与运维内存问题之文件句柄泄漏如何解决
开发与运维内存问题之文件句柄泄漏如何解决
68 3
|
4月前
|
监控 安全 Java
JVM内存问题之排查Direct Memory泄漏有哪些常用方法
JVM内存问题之排查Direct Memory泄漏有哪些常用方法
115 2
|
4月前
|
Arthas 监控 Java
JVM内存问题之使用gperftools分析JNI Memory泄漏的具体步骤是什么
JVM内存问题之使用gperftools分析JNI Memory泄漏的具体步骤是什么
104 2
|
6月前
|
存储 缓存 算法
深入浅出JVM(十四)之内存溢出、泄漏与引用
深入浅出JVM(十四)之内存溢出、泄漏与引用
|
6月前
|
Java
堆内存的溢出案例分析
堆内存的溢出案例分析
26 0
|
XML 存储 监控
JVM记一次PermGen space内存溢出实战案例
JVM记一次PermGen space内存溢出实战案例
86 0
|
Java 关系型数据库 MySQL
19-案例实战剖析-日处理上亿数据的系统内存分析和优化
这是当时开发中遇到的一个真实场景,也是大部分人在开发项目中有可能会遇到的一些场景,该系统主要是做大数据相关计算分析的,日处理数据量在上亿的规模。这里我们重点针对JVM内存的管理来进行模型分析,数据的来源获取主要是MYSQL数据库以及其他数据源里提取大量的数据,通过加载到JVM内存的过程我们来一起分析出现的问题以及如何优化解决
110 0
19-案例实战剖析-日处理上亿数据的系统内存分析和优化