我以为我理解这一点,但昨天的一个生产问题让我质疑我的理解。
我们不进行批量编译,而是让 ASP.NET 在页面被访问时对其进行编译。这通常不是问题,因为我们在周末进行部署并通过测试运行所有页面,所以一切都是周一早上的。
除了上周末的部署。我们在测试中错过了很多页面,所以它们都是在昨天的生产时间编译的。#compilations 的 PerfCounters 达到 100,#application restarts 为 8。但正在运行的应用程序数量也是 8,通常只有 1。
我认为 ASP.NET 在达到编译阈值后重新启动了应用程序,并且它使“旧”应用程序保持足够长的时间以完成请求,然后将其关闭以让重新启动的“版本”接管。是这样吗?是否有可能旧的重新启动的应用程序“版本”仍在运行?
我们看到,除了运行的应用程序太多之外,还有大量内存和 SQL 抖动,就像所有 8 个应用程序都在独立地做他们的事情一样。
我们在一夜之间重新启动并确保所有内容都已编译,并且今天早上运行一个应用程序时一切似乎都很好。
4.0 中有什么东西可以改变这种行为吗?