【问题标题】:AJAX4JSF/AjaxStateHolder | Session Memory LeakAJAX4JSF/AjaxStateHolder |会话内存泄漏
【发布时间】:2011-10-03 12:15:52
【问题描述】:

我正在对一个同时拥有大约 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。

提前感谢您的任何指导。

任何形式的帮助都将不胜感激,因为我在网上没有找到任何有关此问题的信息。

【问题讨论】:

  • 您确实没有提供足够的细节让我们帮助您。会话可能很大,但这可能是因为您的应用程序服务器正在为 3k 并发用户提供服务,这很多。单个用户会话通常消耗多少内存?对象是否存储在实际上可以是无状态的会话中?您可以利用某些托管 bean 的视图范围来将有状态范围限制为单个页面吗?它们的未使用对象是否在不再被读取或使用的会话管理 bean 中被引用?简单的配置调整在这里可能没有什么不同。
  • @maple_shaft 抱歉,这只是一个错字,我的意思是只有 300 个用户。 :) 单个用户会话最多可消耗 25 MB。大多数托管 bean 都是请求范围。会话中没有未使用的引用对象,唯一与内存有关的问题是 ajaxStateHolder。

标签: java performance jsf memory-leaks ajax4jsf


【解决方案1】:

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

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

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

似乎 a4j 的可扩展性不是很好,所以也许最好的长期解决方案是从应用程序中慢慢重构 a4j 组件并用不同的组件框架替换它们?抱歉,我无法提供更多帮助,祝您好运。

【讨论】:

  • 感谢您的回答。 :) 你能指导我如何重构/替换 a4j 组件吗?
  • @M.ES 这太复杂且具体到您的情况,无法给您一个好的答案。有许多不同的组件框架可以有效地替代 a4j:IceFaces、PrettyFaces、Primefaces 等等,但它们在内存管理方面也可能存在类似问题。我的建议是做一个原型并尝试从单个页面中删除 a4j 并将其替换为来自另一个框架的组件。将检测代码放入原型中并执行负载测试。监控内存使用情况并与 a4j 进行比较。知道哪个内存管理最好会很有趣。
  • cont... 这似乎是 JSF 的一个常见问题,而且我至少找不到很多关于 JSF 性能调优的好博客。
猜你喜欢
  • 2013-08-17
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 2021-09-02
  • 2011-10-25
相关资源
最近更新 更多