我们在服务器性能方面遇到了一些问题,在分析我们的IIS请求日志时,我们看到很多请求需要几个分钟才能完成。
当ASP.NET executionTimeout
设置元素中httpRuntime
的默认值 110秒时,这怎么可能?来自docs关于executionTimeout
[强调我的]:
指定在ASP.NET自动关闭之前允许执行请求的最大秒数。
这正是我们希望看到的行为,但是在日志条目下面让我们相信某些内容是错误的,并且这些请求在配置(或默认)超时后不会终止:
我还检查了我们的代码库是否有HttpContext.Server.ScriptTimeout
的调用,但是在极少数情况下只执行了两次,并且最多分配了600(秒)。
答案 0 :(得分:1)
如果不了解您的应用和环境,很难说。但是,这个链接可能有助于解释为什么它可能高于预期。
Description of the time-taken field in IIS 6.0 and IIS 7.0 HTTP logging
具体做法是:
从IIS 6.0开始,时间字段通常包括网络时间。在HTTP.sys在time-taken字段中记录值之前,HTTP.sys通常等待客户端确认最后一个响应数据包发送操作或HTTP.sys等待客户端重置底层TCP连接。因此,当通过慢速网络连接向客户端发送大响应或大响应时,时间字段的值可能会超出预期值。
注意如果满足下列条件之一,则time-taken字段中的值不包括网络时间:
- 响应大小小于或等于2 KB,响应大小来自内存。
- 使用TCP缓冲。使用HTTPAPI.dll的应用程序可以设置HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA标志以启用TCP缓冲 Windows Server 2003 Service Pack 1和更高版本。这允许服务器 将所有响应数据发送到客户端而无需等待 对于客户的相应确认。
希望有所帮助。