2010-08-22 94 views
6

Lift 2.0給Actor帶來了什麼,StatefulSnippets等等讓我印象深刻,但我對這些東西的內存開銷有點擔心。我的問題是雙重的:斯卡拉電梯如何管理狀態?

  1. 如何確定何時垃圾收集狀態對象?
  2. 頁面請求的內存佔用情況如何?

如果一個網絡爬蟲跨網站的腳印跳舞,他們是否會打開足夠的狀態對象來淹沒一個溫和的VPS(512M)?這個問題非常明顯依賴於應用程序,但我很好奇,如果任何人有任何真實世界的數字,他們可以扔給我。

回答

12

電梯在會話中存儲狀態信息,因此一旦會話被銷燬,與該會話相關的狀態就會消失。

在會話中,電梯會跟蹤每個分配狀態的頁面(例如,瀏覽器中的ajax按鈕與服務器上的某個功能之間的映射)並從瀏覽器中獲取心跳。在10分鐘內沒有看到心跳的頁面的函數未被引用,所以JVM可以垃圾收集它們。所有這些都是可調的,所以你可以改變心跳頻率,功能壽命等,但實際上默認值工作得很好。

就會話爆炸而言,是的......這是一個小問題。熱門網站(包括http://demo.liftweb.net/)體驗它。示例代碼(請參閱http://github.com/lift/lift/tree/master/examples/example/)檢測由單個請求創建的會話,然後放棄並儘早過期。我使用256MB堆大小運行demo.liftweb.net(適用於512MB VPS),偶爾會話計數增加超過1000次,但對於搜索引擎流量而言,這會很快被夯實。

+2

作者的回答,我很榮幸。感謝您的細節和一個美妙的項目! – 2010-08-24 17:09:02

1

我認爲關於內存佔用的問題曾經在郵件列表的某個地方回答過,但目前我找不到它。

垃圾收集是在一段空閒時間後完成的。但是,有一個example on the wiki,它使用了一些更好的啓發式方法來終止網頁抓取工具產生的會話。

當然,對於您自己的項目來說,使用VisualVM之類的東西來檢查內存消耗,同時親自產生幾個會話也是有意義的。

+0

沒有聽說過VisualVM,謝謝! – 2010-08-22 21:44:05

+1

不要忘記jvmstat工具中的VisualGC。 – 2010-08-23 06:19:52