代码之家  ›  专栏  ›  技术社区  ›  George Stocker NotMe

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

  •  2
  • George Stocker NotMe  · 技术社区  · 16 年前

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

    3 回复  |  直到 16 年前
        1
  •  4
  •   Nicholas Piasecki    16 年前

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

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

        2
  •  3
  •   Kibbee    16 年前

        3
  •  2
  •   Matt Briggs    16 年前

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

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

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