/ / Jak zarządza stanem Scala's Lift? - scala, lift, stateful, footprint

W jaki sposób Winda Scala zarządza stanem? - scala, winda, stateful, footprint

Jestem pod wrażeniem tego, co Lift 2.0 przynosi do stołu z Actors i StatefulSnippets, itp., Ale trochę się martwię o pamięć tych rzeczy. Moje pytanie jest dwojakie:

  1. Jak Lift określa, kiedy zbierać śmieci?
  2. Jak wygląda ślad pamięci żądania strony?

Jeśli robot sieciowy tańczy w poprzek śladuczy będą otwierać wystarczającą liczbę obiektów państwowych, aby zagłuszyć skromny VPS (512M)? Pytanie jest w oczywisty sposób zależne od aplikacji, ale jestem ciekawy, czy ktoś ma jakieś prawdziwe dane, które mogą mi rzucić.

Odpowiedzi:

12 dla odpowiedzi № 1

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

W trakcie sesji Lift śledzi każdą stronęstan jest przydzielany (np. mapowanie między przyciskiem ajax w przeglądarce a funkcją na serwerze) i ma bicie serca z przeglądarki. Funkcje stron, które nie widziały bicia serca w ciągu 10 minut, nie są odwoływane, więc maszyna JVM może je usunąć. Wszystko to jest regulowane, więc możesz zmieniać częstotliwość rytmu serca, żywotność funkcji itp., Ale w praktyce domyślne ustawienia działają całkiem dobrze.

Jeśli chodzi o eksplozję sesji, tak ... to niewielki problem. Popularne strony (w tym http://demo.liftweb.net/ ) Doświadcz tego. Przykładowy kod (patrz http://github.com/lift/lift/tree/master/examples/example/ ) wykrywa sesje utworzone przez jednegożądanie, a następnie porzucone i wygasa wcześnie. Używam demo.liftweb.net z 256 MB wielkości sterty (która mieści się w VPS o pojemności 512 MB), a czasami liczba sesji wzrasta o ponad 1000, ale szybko zmniejsza się w przypadku ruchu w wyszukiwarkach.


1 dla odpowiedzi nr 2

Myślę, że pytanie dotyczące śladu pamięci zostało kiedyś udzielone gdzieś na liście mailingowej, ale w tej chwili nie mogę go znaleźć.

Zbieranie śmieci odbywa się po pewnym czasie bezczynności. Jest jednak przykład na wiki który korzysta z lepszej heurystyki, aby zabić sesje wywoływane przez roboty sieciowe.

Oczywiście, dla własnego projektu warto sprawdzić zużycie pamięci za pomocą czegoś takiego jak VisualVM podczas tworzenia kilku sesji samodzielnie.