问题:有时请求需要很长时间才能处理.用户看到他们的浏览器在旋转,显然没有得到IIS的任何响应.
>服务器(主机和VM)上的负载可以忽略不计. cpu永远不会超过5%,有10 GB的RAM可用,所有东西都通过MPIO连接到快速SAN.
>我每秒收到30到50个请求,混合了动态和静态内容,只有GET和POST.大多数命中都是缓存的(命中率为80%),因此结构/ SAN / IO上的负载几乎为零.
>在主机和虚拟机上禁用TCP卸载,无论是在网络适配器上还是通过禁用TCP烟囱
> Web应用程序在ASP.NET 4.0集成模式下运行.他们不会长时间调用第三方Web服务等.
>我已经尝试了processModel autoConfig,以及将maxWorkerThreads,maxConnections,maxIOThreads等设置为非常高的数字,没有任何区别.
>数据库查询都在不到1秒的时间内完成.我描述了整整一天,并没有捕获需要更长时间的单个查询.
>我看了很多性能监视器计数器; ASP.NET队列和应用程序队列总是空的,没有任何东西可以排队(考虑到服务器根本没有出汗,这没有任何意义)
>我已经确定使用appcmd列表请求,有时会在IIS“SendResponse”阶段请求“卡住”20-60秒.到目前为止,我唯一能找到的就是为什么我们看到用户在浏览时遇到困难会有所了解.请注意,大多数请求都会得到快速处理,看起来就像来自不同应用程序池的随机请求一样.
知道我还能看到什么吗?什么会导致请求陷入IIS的“SendResponse”阶段?
解决方法
更新:在一些进一步的研究中,我提出的一个可能性是它可能是一个丢弃的网络连接.在this thread中,此人在其IIS日志中报告了Win32状态代码1236,即“网络连接已被本地系统中止”.我不确定这是否意味着请求者取消了请求,或者Web服务器已中止请求.可以想象,在页面内容(图像,JS等)的所有这些HTTP请求都已完成之前,请求者可能会导航到您站点上的另一个页面,这可能会中止对Web服务器的所有待处理请求(即他点击页面上的链接)当它第一次渲染时).我在我的IIS日志中发现了大约1236个Win32状态代码(主要用于静态内容,如GIF,PNG和JS,其中一些与ASPX页面绑定),但是,我不确定这些是否是相同的请求我我看到卡在“SendResponse”状态.