IIS 7.5 Web应用程序在应用程序池回收后的第一个请求非常缓慢。

19
我们的网站在两台iis 7.5机器上运行。 一台正常,而另一台在应用程序池回收后第一个请求处理时间非常长,可能需要高达60秒,这是不可接受的,因为它将被用作我们的生产服务器。
我已经检查了两台服务器上的应用程序池设置,并且它们是相同的,同时两台服务器上的Web应用程序版本也是相同的。 我已经运行了任务管理器和资源监视器,并在发出请求时看到与该机器的连接,但除此之外没有其他任何操作。直到请求完成,IIS甚至不会在日志中显示请求。 我不知道它在这段时间里在做什么。
是否有任何设置的迹象可以尝试解决或找到问题。 这很令人困惑。
编辑: 所以我现在有了更多信息,最终让失败的请求日志起作用(必须给用户IIS_IUSRS权限),但我有一些日志来查看正在发生什么。
在日志文件中,损失的时间在两秒之间。
1. MODULE_PRECONDITION_NOT_MATCH    Name="ScriptModule-4.0", Precondition="managedHandler,runtimeVersionv4.0"            12:09:46.422 
2. VIRTUAL_MODULE_UNRESOLVED        Name="FormsAuthentication", Type="System.Web.Security.FormsAuthenticationModule"     12:12:04.390 

可以看到这两个事件之间需要超过2分钟的时间,有人遇到过这种情况吗?


实例使用的数据也是相同的吗? - Grant Thomas
@Thomas。是的,目前这些网站指向同一个数据库。 - MrJoeBlow
web.config 是相同的吗? - Aristos
1个回答

22

很难准确判断您的其他服务器发生了什么,但是这里有一个简单的检查清单供您重新考虑:

  • 始终进行站点预编译,而不是复制它!在部署之前编译网站可能会大幅提高性能: ASP.NET预编译概述

  • 不要在运行生产应用程序时启用debug =“true”,当web.config中的debug标志为真时,在运行时应用程序使用更多内存,并且由于启用了一些额外的调试路径,代码可以执行得更慢。

  • 检查您的Web.config文件,以确保在<trace>部分禁用跟踪

  • IIS 7.5配备了自动启动功能。 WAS(Windows进程激活服务)启动所有已配置为自动启动的应用程序池,请确保在IIS 7.5 applicationHost.config中将您的应用程序池配置为AlwaysRunning在此处查看更多详细信息

  • 查看ASPNET.CONFIG文件,以查看两个服务器上的配置是否仍相同。每个asp.net服务器都可以通过位于框架文件夹根目录中的aspnet.config文件进行良好配置

  • 确保在您的aspnet.config文件中将代码访问安全性(CAS)的发布者证据设置为false。当您重新启动ASP.NET应用程序池时,这可能会增加初始页面加载时间。在此处阅读更多信息

以下是如何为应用程序禁用检查CAS发布程序策略:

<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>
  • 你还可以尝试使用IIS 7.5的应用初始化模块,这个模块也适用于IIS 8.0,并且可以通过预加载工作进程来减少首次请求的响应时间。

谢谢。我会仔细查看这个列表,希望能有所收获。完成后我会回复。 - MrJoeBlow
六年后,悬念让我无法承受! - slashNburn
@slashNburn 不确定是否适用于您,但如果您正在使用EntityFramework,则其中一部分悬而未决的问题是将edmx编译为sql! - Kamyar Nazeri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接