经典ASP的IIS6中的会话状态和垃圾收集

问题描述:

这是一个倒退问题,可能相对基本,但我很茫然。经典ASP的IIS6中的会话状态和垃圾收集

IIS如何管理经典ASP会话状态?

我们有一个应用程序,可以在会话中存储用户信息,并且当许多用户使用应用程序时,即使“过期期限”尚未过去,它似乎也是用户的回收会话。

我们怀疑当会话状态使用了一定数量的内存时,它开始回收最旧的会话对象或类似的东西。

如果这是正确的,有没有一种方法来控制它与现有的应用程序代码?

谢谢!

当承载ASP应用程序的进程终止时,ASP会话将作为简单的内存COM对象进行存储,所有会话都将被终止。

ASP不会“回收”活动会话。但是,还有其他一些会影响ASP会话的情况。

应用程序池空闲超时

一个幻象原因“会话”似乎过早超时是因为“会话”问题是发展过程中只是测试下。因此,虽然开发人员正在检查页面内容或查看某些代码,但由于其实际上不是实时网站,因此没有其他请求会触及该网站。

在IIS管理器中打开您的ASP应用程序在其中运行的池的属性。看看性能选项卡。空闲超时将默认为20分钟。因此,如果您指定的会话超时时间为60分钟,并且您正在“测试”该超时时间,则实际发现您的会话在20分钟内超时。缺乏活动已经杀死了应用程序池。

应用程序池回收

IIS可以回收其中的ASP应用程序在运行的应用程序池,回收意味着,现有的一套目前托管的ASP应用程序不再接受新的请求。新请求转到一组新进程,旧进程在完成未完成请求时将终止。

有许多不同的设置和条件可以配置,以触发应用程序池的回收。查看池属性对话框的“回收”选项卡。

如果您认为内存可能过度需求,则内存回收部分可能会指出原因。

Web园

一个应用程序池可以包含多个进程运行相同的应用程序集。返回性能选项卡,注意底部的Web Garden部分。默认情况下,它被设置为1.但是多个工作进程会对ASP会话造成严重破坏。如上所述ASP会话是简单的内存中的COM对象。如果后续对特定会话的请求分发给不同的工作人员,则一个工作人员将无法访问另一个工作人员的会话对象。

Session.Abandon或Session.Clear

逻辑错误有时可以是会话的原因显然消失。在会话生活中不恰当的地方调用上述方法可能会导致问题。

+0

快速说明:当您讨论应用程序池空闲超时 - 我认为这意味着*整个应用程序池空闲(即零请求),或者当特定用户的会话闲置空闲超时时也可能发生? – jkelley 2009-09-16 15:50:29

+0

它反映了整个池,你的应用程序可能完全空闲,但如果池还托管其他活动的应用程序,它不会超时。在应用程序池中加载的所有内容都必须完全闲置,才能启动空闲超时。 – AnthonyWJones 2009-09-16 16:44:12

我也经历过同样的事情。会话似乎被清空了数据,这意味着没有变量不再存储在会话中,但由于会话存在,On_SessionStart不会触发。

给你,如果你初始化你以后依赖于访问者数据头痛...

我已经考虑过这一点,似乎没有人知道一个bug,并且还没有找到一个解决方案它。正如你指出的那样,它似乎与内存使用有关,而解决方案似乎是确保你没有任何泄漏。

Implement object-caching in classic ASP memory-leaking

这个问题对我来说竟然是工作进程的性能选项卡下的编号。由于某种原因它被设置为2。我们将其设置回1,问题就消失了。