Web applications 循环IIS应用程序池导致第一次用户体验缓慢

Web applications 循环IIS应用程序池导致第一次用户体验缓慢,web-applications,iis-6,application-pool,Web Applications,Iis 6,Application Pool,当我通过IIS MMC为我的web应用程序回收应用程序池时,在web应用程序中请求页面的第一个用户将遇到来自网站的非常缓慢的响应。在最初的请求之后,那里的每一页都很好。用户也可以注销网站,稍后再回来,速度很快。我关心的是站点的第一个初始负载。如果我要编写一个脚本,在凌晨3点重新启动应用程序池,我还可以对这两个脚本做什么 a、 )模拟用户访问该网站,并使最初的缓慢加载发生,从而使应用程序在早上为用户“准备好” 或 b、 )告诉应用程序池在用户无需启动此过程的情况下启动内存等。在首次加载站点时,一切

当我通过IIS MMC为我的web应用程序回收应用程序池时,在web应用程序中请求页面的第一个用户将遇到来自网站的非常缓慢的响应。在最初的请求之后,那里的每一页都很好。用户也可以注销网站,稍后再回来,速度很快。我关心的是站点的第一个初始负载。如果我要编写一个脚本,在凌晨3点重新启动应用程序池,我还可以对这两个脚本做什么

a、 )模拟用户访问该网站,并使最初的缓慢加载发生,从而使应用程序在早上为用户“准备好”


b、 )告诉应用程序池在用户无需启动此过程的情况下启动内存等。

在首次加载站点时,一切都会发生。你唯一能做的就是在回收后模拟对网站的请求。这可以通过一个简单的应用程序来完成。在.NET中实现这一点最简单的方法是使用该类。

所有事情都发生在站点的第一次加载上。你唯一能做的就是在回收后模拟对网站的请求。这可以通过一个简单的应用程序来完成。在.NET中执行此操作的最简单方法是使用该类。

首先,您不需要在凌晨3点使用脚本来回收应用程序。应用程序池在回收时可以选择设置。默认情况下,我认为他们每29小时循环一次,这是一个奇怪的设置,我建议更改它。否则,您将在一天中的任意时间接到声称会话丢失的电话


我必须假设您的应用程序池中有一个ASP.NET应用程序。在第一次请求时,延迟主要是由于ASP.NET工作进程需要编译网站和/或加载运行时所需的DLL。为了解决这个问题,大多数人使用一个keep-alive任务,该任务可以定期向站点发出请求,以确保站点完全加载。马特的建议也是一个很好的建议,但只有在你自己回收应用程序池的时候才能解决这个问题。应用程序池可以出于任何其他原因自行回收,而“保持活动”将能够在大部分时间内保持加载状态。

首先,您不需要脚本在凌晨3点回收应用程序。应用程序池在回收时可以选择设置。默认情况下,我认为他们每29小时循环一次,这是一个奇怪的设置,我建议更改它。否则,您将在一天中的任意时间接到声称会话丢失的电话


我必须假设您的应用程序池中有一个ASP.NET应用程序。在第一次请求时,延迟主要是由于ASP.NET工作进程需要编译网站和/或加载运行时所需的DLL。为了解决这个问题,大多数人使用一个keep-alive任务,该任务可以定期向站点发出请求,以确保站点完全加载。马特的建议也是一个很好的建议,但只有在你自己回收应用程序池的时候才能解决这个问题。应用程序池可以出于任何其他原因自行回收,而“保持活动”将能够在大部分时间内保持加载状态。

我遇到了类似的问题。在第一次加载时,JIT编译器需要将MSIL转换为机器代码。通常,如果不是第一次使用应用程序,则可以通过“临时ASP.NET文件”文件夹卷影副本快速完成此操作。第一次加载应用程序时,会在此处复制应用程序程序程序集,因此可以在实际位置热交换应用程序dll,而不会出现“正在使用”类型错误

我离题了,JIT编译器根据需要编译程序集,这通常非常快。当您使用已签名的程序集且执行JIT编译的用户(即应用程序池用户)没有internet访问权限时,此情况会发生变化。在这种情况下,当它试图在互联网上验证它无法到达的签名时,它只会在那里停留大约10-20秒

当我们遇到这个问题时,我们使用的是企业库程序集,因此在应用程序池回收后,JIT编译时间不需要几秒钟,而在某些情况下需要一分钟,因为它等待签名验证internet请求超时


因此,要么在JIT期间关闭程序集上的签名验证(配置设置),要么让应用程序池用户访问internet。

我遇到了类似的问题。在第一次加载时,JIT编译器需要将MSIL转换为机器代码。通常,如果不是第一次使用应用程序,则可以通过“临时ASP.NET文件”文件夹卷影副本快速完成此操作。第一次加载应用程序时,会在此处复制应用程序程序程序集,因此可以在实际位置热交换应用程序dll,而不会出现“正在使用”类型错误

我离题了,JIT编译器根据需要编译程序集,这通常非常快。当您使用已签名的程序集且执行JIT编译的用户(即应用程序池用户)没有internet访问权限时,此情况会发生变化。在这种情况下,当它试图在互联网上验证它无法到达的签名时,它只会在那里停留大约10-20秒

当我们遇到这个问题时,我们使用的是企业库程序集,因此在应用程序池回收后,JIT编译时间不需要几秒钟,而在某些情况下需要一分钟,因为它等待签名验证internet请求超时


因此,要么在JIT期间关闭程序集上的签名验证(配置设置),要么让应用程序池用户访问internet。

这是一个老问题,但我最近有过一些这方面的经验,我想我会发布它。根据你的情况,你可以做几件事

它变慢的原因是IIS工作进程在一段时间后进入睡眠状态。此设置称为“空闲超时”,如果需要,可以将其设置为0