ASP.NET-回收应用程序池表明存在更大的问题?

ASP.NET-回收应用程序池表明存在更大的问题?,asp.net,iis,Asp.net,Iis,必须在ASP.NET中回收应用程序池是否表示Web应用程序中存在更大的问题?或者这只是ASP.NET和IIS的“现状” 编辑:由于其中一个错误是“OutOfMemory”异常,您对行动方案有何建议?你会增加记忆吗?配置应用程序?(需要注意的是,我在这方面有自己的想法,并且有一条路要走,但我想听听你的答案)。就我个人而言,我认为这是更大问题的迹象。我的应用程序可以运行数周而不需要回收。他们回收的唯一原因是我们推送代码更新。我认为你应该查看你的事件日志,看看你是否能找到应用程序池被回收的原因。我经常

必须在ASP.NET中回收应用程序池是否表示Web应用程序中存在更大的问题?或者这只是ASP.NET和IIS的“现状”


编辑:由于其中一个错误是“OutOfMemory”异常,您对行动方案有何建议?你会增加记忆吗?配置应用程序?(需要注意的是,我在这方面有自己的想法,并且有一条路要走,但我想听听你的答案)。

就我个人而言,我认为这是更大问题的迹象。我的应用程序可以运行数周而不需要回收。他们回收的唯一原因是我们推送代码更新。我认为你应该查看你的事件日志,看看你是否能找到应用程序池被回收的原因。我经常看到这样的情况,内存泄漏最终会导致内存耗尽,迫使应用程序池重新启动。

IIS的运行状况监视功能可以自动回收应用程序池。因此,一个应用程序池仅仅回收本身并不一定意味着存在问题;这可能只是IIS的预防功能已打开。其思想是,如果您的应用程序出现内存泄漏或忘记释放某些内容,我们可以通过每隔一段时间重新启动应用程序来提高应用程序的总体可用性,就像Windows在桌面上运行了一个月后,重新启动Windows一样,许多应用程序的小错误行为的净影响开始产生影响

在其他一些平台中,您可能不会很快注意到这些问题,尤其是在CGI环境中,因为整个框架都是建立起来的,然后随着每个页面请求而被拆除


理想情况下,您永远不必重新启动应用程序池,而必须这样做通常是某种问题的迹象。回收功能是一种责任保险,可以防止我们自己的错误,或者那些“行星刚刚对齐”的错误,这些错误很难追踪、重新创建,而且发生频率很低,可能不值得进行故障排除。

应用程序池可以回收的原因很多。未处理的异常或线程挂起是常见的原因。如果您没有关闭所有SqlConnections,并且连接池为空,则也可能导致连接池被回收。死锁超时是另一种情况,如果出现死锁,它将挂起工作进程,这将导致循环。此外,如果IIS在服务器上使用了异常数量的资源,它将进行回收(我认为默认值为60%)

还有很多iis设置会触发它。有一些设置需要定期循环(以便清除会话状态),我认为默认情况下是每24小时循环一次。我们有大约40个中等至重型面向公众的物业,我们将在低潮期进行回收


我很确定还有其他原因。人们失去会话可能比应用程序崩溃或服务器挂起要好,这就是为什么IIS内置了这一功能。不幸的是,这会使诊断问题变得非常困难。我会在循环发生时查看您的事件查看器,看看是否有什么有趣的地方可以作为开始。我的下一步是跟踪内存使用情况,然后进行详细的日志记录。

你说的“必须回收”是什么意思?意思是,管理员必须登录到服务器并回收应用程序池,因为用户收到错误(例如outOfMemory)。编辑:查看“相关”问题后,我还没有找到复制品。然而,我确信,“提问”页面上的“查找相关问题”功能已被破坏,因为这些问题都没有出现。请注意,可以通过将其移出进程来解决丢失会话的问题。包含的ASP.NET状态服务器Windows服务是朝这个方向迈出的第一步;唯一的问题是确保你推进去的所有东西都是[可序列化的]。