首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache HttpComponents EntityUtils内存泄漏?

Apache HttpComponents EntityUtils内存泄漏?
EN

Stack Overflow用户
提问于 2015-07-29 17:20:25
回答 1查看 1K关注 0票数 0

我在基于Java的服务器(运行在WebLogic 12和下的Java1.7)上执行了12小时的负载测试。测试结束后,我观察到内存消耗从测试开始时的500 to逐渐上升到3.5Gb左右(并在那里波动了几个小时)。3天后(服务器在这3天里什么也不做)--我再次检查了内存,并注意到这3.5Gb中没有任何东西被释放。

为了确保GC正在执行,我使用jcmd命令显式GC:

  • GC.run
  • GC.run_finalization
  • GC.run

然后,我创建了一个堆快照,并使用YourKit分析器进行了分析( jvisualvm也有相同的结果)。

我注意到,在3天的不活动之后,我仍然有2.5Gb的“不可访问”对象在那里。典型对象的传入引用如下(我有大约700 K这样的对象):

我检查了Apache HttpComponents代码(HttpCore版本4.3.2),注意到EntityUtils.toString中有以下奇怪的代码(我在服务器中使用):

在我看来,由于阅读器对象没有关闭-它可以创建引用,最终导致我观察到的漏洞。

  • 这是Apache HttpCore EntityUtils的泄漏代码吗?
  • 在3天后和GC.run之后有这么多无法到达的对象,还有其他原因吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-07-30 13:29:38

考虑扩展AsyncCharConsumer (如图所示的这里 )以生成具有响应内容的字符串,或者在需要更复杂的响应处理时使用HttpAsyncResponseConsumer

EntityUtil方法通常用于由阻塞InputStream支持的实体。即使这样,我也建议直接从内容流中消费实体内容,而不是将其转换为字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31707104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档