AJAX4JSF / AjaxStateHolder | Утечка памяти сеанса - PullRequest
1 голос
/ 03 октября 2011

Я работаю над настройкой производительности корпоративного веб-приложения с около 300 одновременно работающих пользователей.Из журнала 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

Все вышеупомянутые попытки не смогли решить проблему утечки памяти.

Обновления

* Один сеанс пользователя может занимать до 25 МБ из-за огромного размера AjaxStateHolder.

* Большинство управляемых bean-компонентов приложения являются областью запроса, и в сеансе нет неиспользуемых ссылочных объектов, единственная проблема, связаннаяпамять является ajaxStateHolder.

Заранее благодарим за любые рекомендации.

Буду признателен за любую помощь, потому что я не нашел ничего по этому вопросу в Интернете.

1 Ответ

0 голосов
/ 04 октября 2011

Кажется, вы столкнулись с дефектом утечки памяти сеанса JSF / a4j. См. Ссылку ниже для более подробного описания по этому вопросу:

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

Похоже, что состояние просмотра кэшируется в сеансе и не очищается. Это ошибка с a4j и не может быть исправлена, просто обойти. Конфигурации, которые вы добавили в web.xml, являются единственным предложенным решением, но, видимо, это не слишком помогает.

Кажется, что a4j не очень масштабируемый, так что, возможно, лучшее долгосрочное решение - медленно реорганизовать компоненты a4j из приложения и заменить их другой структурой компонентов? Извините, я не мог больше помочь, и я желаю вам удачи.

...