Lift 2.0与演员和Statefulsnippets等带给桌子上的Lift 2.0给我留下了深刻的印象,但是我有点担心这些事情的记忆。我的问题是双重的:

  1. 提升如何确定何时垃圾收集状态对象?
  2. 页面请求的内存足迹是什么样的?

如果Web爬网在网站的整体上跳舞,他们是否会打开足够的状态对象来淹没适度的VPS(51.2m)?这个问题显然很取决于应用程序,但是我很好奇是否有人有任何真实的人物可以向我扔掉。

有帮助吗?

解决方案

LIFT将状态信息存储在会话中,因此一旦会话摧毁了与该会话相关的状态,则会消失。

在会话中,升降音符跟踪为状态分配的每个页面(例如,在浏览器中的AJAX按钮和服务器上的功能之间映射),并在浏览器中具有心跳。没有引用在10分钟内没有看到心跳的页面的功能,因此JVM可以垃圾收集它们。所有这些都是可调的,因此您可以更改心跳频率,功能寿命等,但实际上,默认值运行良好。

在会议爆炸方面,是的……这是一个小问题。受欢迎的网站(包括 http://demo.liftweb.net/ )体验它。示例代码(请参阅 http://github.com/lift/lift/tree/master/examples/example/ )检测由单个请求创建的会议,然后放弃并早日到期。我正在运行demo.liftweb.net,其堆尺寸为256MB(适合512MB VPS),偶尔会议计数会增加1,000多个,但很快就会降低搜索引擎流量。

其他提示

我认为有关内存足迹的问题曾经在邮件列表中的某个地方回答,但目前找不到。

垃圾收集是在闲置的时间后完成的。但是,有一个 Wiki上的示例 它使用一些更好的启发式方法来杀死由网络爬网催生的会议。

当然,对于您自己的项目,使用VisualVM之类的东西检查记忆消耗是有意义的,同时亲自播放了几次会话。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top