我们的一些web服务器托管了相当多的站点。在日常事件中,这并没有太大的影响,因为所有页面的交付速度都相当快,服务器的资源也得到了很好的调整。
然而,当主机需要重新启动(例如,系统更新)时,所有站点的热身可能需要相当长的时间--有时超过一个小时才能完成所有的热身。大概是因为有十多个站点试图占用CPU时间进行编译和加载。
在网络上搜索,快速热身的建议围绕着服务器只托管少数几个站点的想法,但是对于有很多站点的服务器来说,有什么好方法呢?
我们考虑过试着进行热身,这样在给定的时间内处理的站点不会比CPU有空间--这意味着最后一个站点可能还没有做好更快的准备,但是第一个站点很快就会出现。已经比什么都不给的要好得多。
IIS是否在IIS启动时提供分段预热?
发布于 2015-01-29 03:47:54
预编译您的网站将显着减少热身延迟,并将避免一些间歇性的比赛条件,偶尔发生在编译。您还可以配置IIS 8,以便在更新时立即预加载每个网站,但如果CPU超载,这可能不是一个好的选择。听起来你可能需要更多的CPU。根据经验,我可以告诉您,如果您的CPU在10分钟分辨率图上超过75%,您的用户将会遇到令人不快的延迟。
有关如何配置应用程序预加载,请参见IIS8.0应用程序初始化。
编辑:对于重新启动系统后的预热,仍然强烈推荐预编译,但是在第一个请求之前启动所有站点有一个不同的配置选项(参见下面的参考)。在IIS 8上,您可能仍然希望执行应用程序级别的启动(它将命中特定的页面,这样您就可以温暖缓存并加载动态依赖项,而不必在Application_Start中手动执行此操作。这种类型的重新启动应该在非高峰负载期间进行,多台具有负载均衡器的服务器通常是避免用户受到热身延迟影响的方法。你不需要所有昂贵的硬件负载均衡器,内置于windows中的负载平衡器只是好的小商店。当您准备开始维护时,您将耗尽要重新启动的服务器,等待请求完成(只要您愿意),进行维护,然后在负载均衡器中重新启动服务器,然后对另一个服务器重复。如果您的流量是这样的,通过网络广播它是一个问题,您可能需要一个单独的专用子网的web服务器或路由器处理ICMP。
有关如何在系统重新启动后配置自动应用程序启动,请参见为应用程序池(IIS 7)配置自动启动。
发布于 2015-02-20 18:45:42
需要考虑的另一件事是,如果编译元素的属性"batch“设置为true,则在每个站点中签入web.config文件。MSDN文档
这指示asp.net一次编译站点上的所有页面(批处理),这可能非常慢。如果将其设置为false,则只有获得请求的页面才会被编译,但只编译一次。(除了预先编译/app_code中的所有内容)。因此,你要在一堆网站上交换大量的预先编译过程,偶尔会对一天内被请求的页面进行一次编译。这大大缩短了启动时间。
同样,预编译,如果有可用的资源,多个服务器/负载平衡将是很好的。
https://serverfault.com/questions/663111
复制相似问题