Как Scala's Lift управляет состоянием? - PullRequest
6 голосов
/ 22 августа 2010

Я весьма впечатлен тем, что Lift 2.0 вносит в таблицу с Actors, StatefulSnippets и т. Д., Но меня немного беспокоит нехватка памяти этих вещей.У меня двоякий вопрос:

  1. Как Lift определяет, когда собирать мусор для объектов состояния?
  2. Как выглядит объем памяти при запросе страницы?

Если веб-сканер танцует по всей площади сайта, собираются ли они открыть достаточно объектов состояния, чтобы заглушить скромный VPS (512 МБ)?Этот вопрос, очевидно, зависит от приложения, но мне любопытно, есть ли у кого-нибудь реальные цифры, которые они могут бросить в меня.

Ответы [ 2 ]

12 голосов
/ 24 августа 2010

Lift хранит информацию о состоянии в сеансе, поэтому после разрушения сеанса состояние, связанное с этим сеансом, исчезает.

В рамках сеанса Lift отслеживает каждую страницу, для которой выделено состояние (например, отображение междукнопка ajax в браузере и функция на сервере) и пульс от браузера.Функции для страниц, которые не видели пульса в течение 10 минут, не имеют ссылок, поэтому JVM может собирать их.Все это настраивается, так что вы можете изменить частоту сердечных сокращений, продолжительность жизни функции и т. Д., Но на практике значения по умолчанию работают достаточно хорошо.

С точки зрения взрыва сеанса, да ... это незначительная проблема,Популярные сайты (включая http://demo.liftweb.net/) испытывают это.Пример кода (см. http://github.com/lift/lift/tree/master/examples/example/) обнаруживает сеансы, которые были созданы одним запросом, а затем отменены, и заканчивает их рано.Я использую demo.liftweb.net с размером кучи 256 МБ (что соответствует VPS 512 МБ), и время от времени число сеансов увеличивается более 1000, но это быстро сокращается для трафика из поисковых систем.

1 голос
/ 22 августа 2010

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

Сборка мусора выполняется после некоторого простоя. Однако в вики есть пример , в котором используется некоторая улучшенная эвристика для уничтожения сеансов, порожденных сканерами.

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

...