以下是 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 数据包才能完全传输,即至少几千字节,否则所花费的时间将接近于零。