AJAX4JSF / AjaxStateHolder |会话内存泄漏

时间:2011-10-03 12:15:53

标签: java performance jsf memory-leaks ajax4jsf

我正在使用大约300个同时用户进行企业Web应用程序的性能调优。我从GC日志中注意到,即使在Full GC之后,应用程序堆也在不断增长,并且对象总是在累积。我已经获得了生产堆转储,我很惊讶会话对象占据堆大小的90%以上!这都是因为AjaxStateHolderObject。

该应用程序在JSF 1.X和RichFaces 3.3.0上运行。

在开始讨论之前,我尝试了以下内容:

  • 将以下代码添加到web.xml

<context-param>

<param-name>org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION</param-name>

<param-value>1</param-value>

</context-param>

  • 将以下代码添加到web.xml

<context-param>

<param-name>com.sun.faces.numberOfViewsInSession</param-name>

<param-value>1</param-value>

</context-param>

<context-param>

<param-name>com.sun.faces.numberOfLogicalViews</param-name>

<param-value>1</param-value>

</context-param>

  • 从RichFaces 3.3.0升级到3.3.3

以上所有尝试都无法解决内存泄漏问题。

更新

*由于AjaxStateHolder规模庞大,单个用户会话最多可消耗25 MB。

*应用程序的大多数托管bean都是请求范围,会话中没有未使用的引用对象,唯一有关内存的问题是ajaxStateHolder。

提前感谢任何指导。

任何形式的帮助都将受到赞赏,因为我在网上找不到任何与此问题有关的内容。

1 个答案:

答案 0 :(得分:0)

您似乎遇到了JSF / a4j会话内存泄漏缺陷。有关此事的更多说明,请参阅以下链接:

https://issues.jboss.org/browse/RF-3878

看起来好像视图状态正在会话中缓存而未清除。它是a4j的一个错误,无法修复,只是解决了。您添加到web.xml的配置是唯一建议的解决方法,但显然这没有太大帮助。

似乎a4j的可扩展性不是很高,所以也许最好的长期解决方案是慢慢地将a4j组件重构出应用程序并用不同的组件框架替换它们?对不起,我不能帮忙,祝你好运。