Подтвердить что ты не робот

Настройка JSF

Запуск проблемы, когда JSF заполняет наши сеансы. На днях у нас был сбой системы. Отправил кучу в IBM для обзора и выяснил, что у нас были сеансы размером до 50 миллионов. Они нашли компоненты JSF в сеансе и некоторые очень большие.

Итак, есть ли какая-то настройка, которая может быть выполнена? Элементы конфигурации, на которые нужно смотреть? Или в другом направлении.

Наша система построена с использованием JSF и Spring для уровня представления, задний конец - EJB, Spring и Hibernate все работает на WebSphere 6.1.

4b9b3361

Ответ 1

JSF - полезная технология, но вы можете, конечно, повесить ее на себя.

Похоже, либо вы накапливаете размер состояния представления (путем установки больших значений на компонентах), либо вы пропускаете ссылки на компоненты в другое состояние сеанса (что было бы плохо). Еще одним потенциальным виновником будет чрезмерно большой взгляд (я видел, как легкость, с которой люди могут создавать деревья UI, ведет к очень большим графикам управления со всеми таблицами данных). Я знаю, что IBM предоставляет расширенные текстовые и электронные таблицы - я не могу прокомментировать, какое влияние их использование будет иметь на размер штата.

Низкий висящий плод - проверить управляемый beans, настроенный для области сеанса в faces-config.xml.

JSF сохраняет две вещи между запросами:

  • вид (все элементы управления на странице)
  • состояние представления (состояние элементов управления)

Они разделены, поскольку некоторые элементы управления, такие как дочерние элементы таблицы данных, могут иметь несколько состояний (по одному для каждой строки). Состояние может быть сохранено либо в скрытом поле формы (которое, если оно не зашифровано, может быть большой угрозой безопасности) или в сеансе. Чтобы разместить несколько окон браузера, совместно использующих один и тот же сеанс (и, в некоторых реализациях, поддержка кнопки "Назад" ), сохраняются несколько представлений.

  • Должна быть опция конфигурации для установки количества состояний представления, которые приложение будет хранить в сеансе для данного пользователя в любой момент времени.
  • Вы можете измерить размер состояния представления, предоставив StateManager, который измеряет размер сохраненного вида/состояния (настройте StateManager в faces-config.xml с открытым конструктором, который принимает StateManager - подробнее см. HttpSessionAttributeListener в вашем web.xml. Вы можете получить трассировку , чтобы помочь выявить проблемные области в вашем приложении.

Ответ 2

Это вторая система, о которой я слышал, которая умерла из-за JSF и чрезмерного создания объекта. Другой также использовал Spring и Hibernate в задней части. Профилирование с помощью OptimizeIt показало, что ответ на бэкэнд был порядка миллисекунд для всех запросов, но вы можете снова отобразить браузер с секундомером, потому что это заняло так много времени - от 30 секунд до нескольких минут. Память, потребляемая клиентом, была нелепой.

Я был только наблюдателем, а не членом этой проектной команды. Я должен буду спросить, была ли проблема когда-либо исправлена, и если да, то какое решение могло бы быть.

Но если две точки создают тенденцию, я бы сказал, что JSF может быть смертельно испорчен. Лично я полностью избегаю этого.

Почему бы не попробовать веб-интерфейс Spring и посмотреть, помогает ли это? Если вы следуете идиоме Spring, это должно быть относительно простым вопросом замены JSF на JSPL-основанные JSP и контроллеры Spring.

Ответ 3

Я работал над проектом JSF и обнаружил, что у нас была ошибка, когда мы добавляли несколько элементов JSF h: form. Результирующая копия всего окна просмотра включается в каждую форму. Сокращение до 1 формы на страницу сбрило страницы от ~ 2M до ~ 300K.

Ответ 4

У вас могут возникать проблемы с большим количеством поддержки beans в качестве области сеанса.

Вы можете попробовать посмотреть MyFaces Orchestra. Это библиотека, которая предоставляет область разговора, поэтому, как только пользователь завершит работу с определенным набором beans, они будут удалены из сеанса.

Я понимаю, что Spring WebFlow имеет похожие функции, но я на самом деле не смотрел его!

Ответ 5

JSF хранит представления в сеансе для поддержки его богатой компонентной архитектуры (необходимо сохранить свое состояние просмотра) и может заполнить кучу, если она не используется должным образом. Если у вас нет больших рабочих потоков, всегда используйте небольшое количество просмотров за сеанс. Также избегайте максимально возможного сохранения бэби-бинов в сеансе. Используйте специальный тег, чтобы сделать объект данных только для следующего цикла запроса. Мы также можем использовать Spring Web Flow с JSF, который вводит область обзора и область потока, если у нас есть длинные рабочие процессы в приложении, чтобы уменьшить количество просмотров, настроенных в сеансе. JSF можно использовать для создания богатого пользовательского интерфейса, что помогает создавать Web-приложения, похожие на настольные приложения. Выделите конкретную кучу для структуры JSF для выполнения своей работы. Но эффективно используйте память в стороне приложения и убедитесь, что утечки памяти нет. Все утечки памяти необходимо исследовать и исправлять во время разработки. В аутах используется профилировщик, чтобы найти утечки памяти и узкие места производительности, которые существуют в приложении.

Mat.

Ответ 6

Если вы используете MyFaces < 1.1.6 существует огромная утечка памяти, так как она кэширует старые сериализованные представления в сеансе, фактически никогда не позволяя им выпускаться, чтобы их можно было собрать мусором. У меня была серьезная проблема с этим, и у меня было 50 Мб сессий. Быстрое обновление MyFaces устранило проблему без проблем.

Ответ 7

Настройте session persistense на базу данных, и он будет использовать наименее используемый алгоритм, чтобы вывести наименее используемые сеансы из памяти. Он имеет высокую производительность (при правильной настройке) и поможет вам конкретично и быстро.

Ответ 8

Немного старой темы, но натолкнулся на это в последнее время. Часто состояние просмотра и просмотра сохраняется (как упоминалось ранее) и заполняет сеанс, чтобы кнопка "Назад" работала. Есть параметры для сортировки этого в дескрипторах развертывания (web.xml), которые необходимо установить.

Для нескольких экземпляров некоторых библиотек может потребоваться более одного параметра, например при использовании MyFaces и JSF RI. По умолчанию они могут быть установлены на некоторые довольно высокие значения (соответственно 20 и 16). Это означает, что вы можете использовать 20-кратное пространство, в котором вы должны находиться (часть?) Сеанса.

Ответ 9

Советы по настройке JSF для производственной среды:
 - Использование изображений, CSS и ресурсов JavaScript должно выполняться с помощью стандартных тегов HTML (img,link,script), а не на стороне сервера, и обязательно установите #{request.contextPath}, прежде чем URL-адрес избежит проблем с относительными путями.
 - Кэш статических разделов страницы (menu,header,footer) с помощью omnifaces cache
 - Установите для переменной refresh-period значение -1  - установить project-stage на производство
 - Проверьте фильтры кода, если есть

Кроме того, проверьте мою статью "" Лица Java Server в реальных приложениях" на DZone, это даст вам полную картину о JSF в среды разработки, тестирования и производства.