2010-08-22 4 views
6

Я очень впечатлен тем, что Lift 2.0 приносит в таблицу с Actors и StatefulSnippets и т. Д., Но я немного волнуюсь из-за нехватки памяти в этих вещах. Мой вопрос двоякий:Как управляет штатом Скала?

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

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

ответ

12

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

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

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

+2

Ответ от автора, для меня большая честь. Спасибо за детали и за прекрасный проект! –

1

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

Сбор мусора производится после некоторого простоя. Существует, однако, example on the wiki, который использует несколько лучших эвристик, чтобы убивать сеансы, порожденные веб-сканерами.

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

+0

Не слышал о VisualVM, спасибо! –

+1

Не забудьте VisualGC внутри инструмента jvmstat. –