2010-08-22 18 views
6

Jestem pod dużym wrażeniem tego, co Lift 2.0 wprowadza do tabeli z Aktorami i StatefulSnippets, itp., Ale jestem trochę zaniepokojony nadmiernym obciążeniem pamięci tych rzeczy. Moje pytanie jest dwojakie:Jak system Scala zarządza stanem windy?

  1. W jaki sposób Lift określa, kiedy zbierać śmieci?
  2. Jak wygląda ślad pamięci strony?

Jeśli robot internetowy przetnie się po odcinkach witryny, czy otworzą się wystarczająco obiekty stanu, aby zagłuszyć skromny VPS (512M)? Pytanie jest w oczywisty sposób zależne od aplikacji, ale jestem ciekawy, czy ktoś ma jakieś rzeczywiste liczby, które mogą mi wyrzucić.

Odpowiedz

12

Winda przechowuje informacje o stanie w sesji, więc po zniszczeniu sesji stan związany z tą sesją znika.

W ramach sesji Podnoszenie śledzi każdą stronę, dla której jest przydzielony stan (np. Mapowanie między przyciskiem ajax w przeglądarce i funkcją na serwerze) i ma bicie serca z przeglądarki. Funkcje stron, które nie widziały pulsu w ciągu 10 minut, nie są odwoływane, więc JVM może je usunąć. Wszystko to można przestroić, więc możesz zmienić częstotliwość bicia serca, długość życia funkcji itp., Ale w praktyce wartości domyślne działają całkiem nieźle.

Pod względem eksplozji sesji, tak ... to niewielki problem. Popularne witryny (w tym http://demo.liftweb.net/). Przykładowy kod (patrz http://github.com/lift/lift/tree/master/examples/example/) wykrywa sesje, które zostały utworzone przez pojedyncze żądanie, a następnie porzucił i wygasa te wcześniej. Używam demo.liftweb.net z 256 MB wielkości sterty (pasowałoby to do 512 MB VPS), a czasami liczba sesji wzrasta ponad 1000, ale to szybko jest zmniejszone dla ruchu w wyszukiwarkach.

+2

Odpowiedź od autora, jestem zaszczycony. Dzięki za szczegóły i za wspaniały projekt! –

1

Myślę, że pytanie o ślad pamięci było kiedyś odpowiedziano gdzieś na liście mailingowej, ale nie mogę go znaleźć w tej chwili.

Usuwanie śmieci odbywa się po pewnym czasie bezczynności. Istnieje jednak example on the wiki, który używa nieco lepszych heurystyk do zabijania sesji spawnowanych przez roboty sieciowe.

Oczywiście dla własnego projektu sensowne jest sprawdzanie zużycia pamięci za pomocą programu VisualVM, podczas gdy samemu tworzy się kilka sesji.

+0

Nie słyszałem o VisualVM, dzięki! –

+1

Nie zapomnij o VisualGC wewnątrz narzędzia jvmstat. –