ObjectMapper SerializerCache 的单个实例中的对象过多导致内存泄漏
Posted
技术标签:
【中文标题】ObjectMapper SerializerCache 的单个实例中的对象过多导致内存泄漏【英文标题】:Too Many objects in single instance of ObjectMapper SerializerCache causing memory leak 【发布时间】:2016-12-09 06:01:56 【问题描述】:我们正在运行一个基于 Spring Boot 的服务,我们在运行性能测试时遇到了 GC 问题。当我们查看 Eclipse 插件“内存分析工具包”(MAT)上的堆转储时,我们发现如下:
One instance of "com.fasterxml.jackson.databind.ObjectMapper" loaded by "org.apache.catalina.loader.WebappClassLoader @ 0x1000050b8" occupies 2,057,443,904 (93.15%) bytes. The memory is accumulated in one instance of "com.fasterxml.jackson.databind.ser.SerializerCache" loaded by "org.apache.catalina.loader.WebappClassLoader @ 0x1000050b8".
Keywords
com.fasterxml.jackson.databind.ser.SerializerCache
com.fasterxml.jackson.databind.ObjectMapper
org.apache.catalina.loader.WebappClassLoader @ 0x1000050b8
不太清楚这里发生了什么。为什么 SerializerCache 会在 Map 中保存这么多对象,以及如何清除它。
使用 SpringIO:2.0.6.RELEASE
【问题讨论】:
【参考方案1】:SpringIO 2.0.6.RELEASE 使用 jackson 版本 2.6.7,顺便提一下,它没有出现在 master 分支的 Jackson 发布页面 (https://github.com/FasterXML/jackson-databind/blob/master/release-notes/VERSION)。 我升级了我的应用程序以使用杰克逊版本 2.8.1 并解决了问题。
【讨论】:
以上是关于ObjectMapper SerializerCache 的单个实例中的对象过多导致内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章