成千上万的PageContext实例导致OutOfMemoryError。 JSP标记是否释放PageContext?

时间:2017-03-17 12:01:12

标签: java jsp memory-leaks jboss jsp-tags

我们正在努力摆脱PageContextImplPerThreadTagHandlerPool$PerThreadData人口过多导致的内存不足错误。

Memory Analyzer说主要嫌疑人是PageContextImpl

  

由“org.jboss.modules.ModuleClassLoader @ 0x640015838”加载的“org.apache.jasper.runtime.PageContextImpl”的12,874个实例占用922,562,624(21.53%)个字节。

进一步调查显示PageContextImpl个实例是从javax.servlet.jsp.tagext.TagSupport(来自jboss-javaee-all-6.0-3.0.3.Final.jar)引用的。

enter image description here

GetTag类扩展了javax.servlet.jsp.tagext.TagSupport,其中包含字段

private Tag parent;
private Hashtable<String, Object> values;
protected String id;
protected PageContext pageContext;

阅读这样的文章:

我怀疑我们在自定义标记生命周期中存在误解或错误的问题,但是我无法找到根本原因。也许答案在其中一篇文章中,但似乎没有一篇文章描述未发布的PageContext个实例。

顺便说一下,我们记忆中的PerThreadTagHandlerPool$PerThreadData人口也非常多,完全像已经提到的Memory Leak using custom JSP tags on JBoss as7中描述的那样:

enter image description here

我知道我们可能只是禁用了标记池,但我想首先找到根本原因。

问题:

  1. 池化 JSP标签是否会发布对PageContext的引用?
  2. 你能看到这个内存泄漏的其他原因吗?

0 个答案:

没有答案