新会话失败

我们已经开始在Intranet服务器上看到服务器只响应错误页面“HTTP / 1.1新build会话失败”的任何页面的实例。 看来我们可以通过运行IISRESET来解决这个问题,但是这感觉就像我们只是在治疗症状。

服务器是在Windows Server 2003上运行带有0.5Gb RAM的IIS6的虚拟化服务器。 我们的Intranet是用ASP编写的,但是我们也有在网站上运行的ASP.NET 2.0应用程序。 该网站设置为匿名和集成身份validation。

是什么导致IIS进入这种错误状态? 服务器是否可以饱和请求,即我们需要扩展和移动一些应用程序到另一台服务器上?

我见过KB210842,但我不确定它是否适用于IIS 4

当你得到这个错误时有多less内存可用? 如果你已经饱和所有内存,新的会话将失败。

你的事件日志可能有更多的信息。 检查应用程序日志和系统日志以查找错误

对于Windows 2003 + IIS 6而言,512MB内存不足以满足任何可观的负载 – 特别是对于ASP .NET 2.0。 升级到1GB将会有很大的不同。

我想在这里添加一些信息。 这个问题只有一个直接原因 – 没有足够的内存新会话分配。 真正的问题是什么会消耗记忆,显然在不同的情况下答案是不一样的。 让我先说一下我的设置:

我正在基于Virtuozzo的VPS-es上进行托pipe,您可以更清楚地看到问题。 有什么区别 – 在VMWare上有类似于真正的机器的东西 – 交换文件和RAM,它们可能不完全对应于真实的东西,但有效的VMWare(和任何基于硬件虚拟化的解决scheme)可以被视为一个真正的机器。 有了Virtuozzo,你只能获得内存 – 其中的一部分将在页面文件中,但是从VPS内部你不能真正看到差异。 因此,我使用的内存只有286MB,而且这是我可以使用的所有内存,当你使用内存设置为286的VMWare时,你可能还会有一些额外的交换空间,因此你的可用内存将会更多很大程度上取决于页面文件的大小)。

在286 MB的机器上,我可以容纳相当数量的访问者的15-20个应用程序。 我正在使用我自己的框架和组件 – 包括自己的数据库引擎。 我相信没有发生内存泄漏(经过几年和几年的testing),但总共286MB的内存是非常薄的冰。 你会不时得到“新的会话失败” – 问题是如何避免被卡住,直到重新启动(的IIS或机器)。 答案是调整COM +应用程序的内存限制,也可能是其他一些回收选项。 你应该确保这个限制是这样的,当工作变得很糟糕的时候,工作进程将被回收,并且你应该保持你所使用的所有COM +应用程序的总内存量,因为如果内存总量大于可用的内存,你可以在没有任何工作进程超过限制的情况下获得可用的内存,但所有这些内存一起占用所有可用内存,而没有一个可以回收以释放一些宝贵的兆字节。

另一件要检查的是ASPcaching选项 – 在内存中caching了多less文件,caching了多less个脚本引擎(这也发生在内存中)。 默认值非常大,并且效果类似于内存泄漏 – 尤其是如果您有许多ASP文件和许多站点(caching在全局级别configuration,但在工作进程中完成)。

所以,通过微调COM +应用程序和caching选项,你可以让服务器运行,如果不是非常顺利的话,至less确保它会自动恢复,每天最多只能请求几个请求(从数十万)返回New会话失败。 如果您保持COM +应用程序的数量低(最多2-3个),您可以保留该轨道并select适当的内存限制,可能会设置对会话丢失不敏感的应用程序的时间间隔回收。

在同一台服务器上还有另外一件事情要考虑.NET应用程序。 没有关注,他们可以杀死所有其他的东西,并获得所有的服 问题是垃圾收集 – ASP.NET(和任何.NET)应用程序不会释放他们的内存,因为一些ASP经典或PHP应用程序需要它,并将保持占用内存,即使他们不使用它 – 最终他们将释放但是,他们可能会保留几个小时 – 就这样。 解决scheme是 – 避免将.NET和非.NET应用程序混合在同一台服务器上,如果不能避免将.NET应用程序放在单独的COM +池中,并设置严格的内存限制并尽可能降低。

那么,我希望这是有帮助的。 我有很多pipe理服务器的经验,很less有内存可用 – 这不是很困难,但需要注意,不希望问题会随着补丁或其他神奇的解决scheme而消失。

您是在IIS中运行会话状态,还是在超出proc提供程序中运行。 将会话状态移动到提供程序将允许您使用来自会话状态服务而不是IIS进程的内存。 此外,会话状态将在IIS和应用程序域重新启动后继续存在。 我也注意到,512Meg是在一边。

看来IIS6没有足够的内存分配给会话。 如果这经常发生,您可能需要在应用程序池上设置内存回收限制。 这样它就不会“吃”你所有的可用资源。 请记住,回收内存将导致会话的丢失。