[英]Memory leak, spring 3.2.0.RELEASE, httpcomponents 4.2.3
[英]Apache HttpComponents EntityUtils memory leak?
我在基于Java Servlet的服务器(在WebLogic 12和Oracle Enterprise Linux下运行的Java 1.7)上执行了12小时的负载测试。 测试完成后,我发现内存消耗从测试开始时的500Mb逐渐增加到大约3.5Gb(并在+/- 500Mb的范围内波动了几个小时)。 3天后(服务器在这3天内没有执行任何操作)-我再次检查了内存,并发现3.5Gb中的任何内容都没有释放。
为了确保GC正在执行,我使用jcmd疯狂进行了显式GC:
然后,我制作了一个堆快照,并使用YourKit分析器进行了分析(与jvisualvm相同的结果)。
我注意到在闲置3天后,仍有2.5Gb的“无法访问”对象仍然存在。 典型对象的传入引用如下所示(我有约700K的此类对象):
我检查了Apache HttpComponents代码(HttpCore版本4.3.2),然后在EntityUtils.toString(我在服务器中使用的代码)中注意到以下奇怪的代码:
在我看来,由于没有关闭读者对象-它可以创建引用,最终导致我观察到的泄漏。
谢谢。
考虑延长AsyncCharConsumer
如图所示这里生产具有响应内容或使用字符串HttpAsyncResponseConsumer
如果需要更复杂的响应处理。
EntityUtil
方法通常用于由阻塞InputStream
支持的实体。 即使那样,我通常还是建议直接从内容流中使用实体内容,而不是将其转换为字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.