对于相当小的静态数据,什么原因会导致 IIS 所用时间值超过 5 分钟?

对于相当小的静态数据,什么原因会导致 IIS 所用时间值超过 5 分钟?

以下是 IIS 日志的摘录,仅显示时间和所用时间字段。有时我们会收到似乎需要 5 分钟以上的请求。这些缓慢的请求包括动态数据 (ASP.NET) 以及从本地磁盘提供的静态文件,例如下面的情况,耗时 336134 毫秒。

time      time-taken 
00:06:32         109 
00:06:33          46 
00:06:33          15 
00:06:33          78 
00:06:33          31 
00:06:33          31 
00:06:33          31 
00:06:33          31 
00:06:33          62 
00:06:36      336134 
00:06:38          15 
00:06:39          62 
00:06:39          31 
00:06:39          46 
00:06:39          62 
00:06:39          31 
00:06:39          15 
00:06:39          15 
00:06:39          31 
00:06:41          31 
00:06:44        2203 
00:06:44          31 
00:06:44          31 
00:06:44          62 
00:06:44          31 
00:06:44          15 

正如日志片段所示,服务器通常不会在那时陷入超负荷状态。

您知道如何彻底查明此事吗?

我想知道这些长时间是否实际上不是由于服务器速度慢,而是因为客户端(可能处于某种糟糕的、断开的无线连接上)没有及时收到完整的 TCP 数据。因为这里它说:

从 IIS 6.0 开始,time-taken 字段通常包含网络时间。在 HTTP.sys 记录 time-taken 字段的值之前,HTTP.sys 通常等待客户端确认最后一个响应数据包发送操作,或者 HTTP.sys 等待客户端重置底层 TCP 连接。

答案1

总结

从服务器响应到客户端确认最后一个 TCP 数据包的时间都包含在耗时中,因此缓慢的客户端,例如由于移动连接不稳定,可以任意增加所用时间,让你的服务器看起来很糟糕。当然,除非你知道 time-taken 不是服务器完全处理请求所花费的时间。


我可以使用以下命令进行验证

curl --limit-rate 1000 http://...

我可以time-taken通过调整限制速率来增加 IIS 的记录,只要我的耐心允许,我就会尝试,超过 3 分钟。

因此,考虑到在那个非常慢的响应的同时其他响应却相当快,那个特定的客户端很可能就是问题所在。

注意:如果您想尝试此操作,请确保使用足够大的文件,以便需要几个 IP 数据包才能完全传输,即至少几千字节,否则所花费的时间将接近于零。

相关内容