time curl
http://www.baidu.com
time curl
http://www.taobao.com
time curl
http://www.qq.com
... ...
所有网站,不管大站小站,抓取所有网站的时间
全部都在5秒以上,
大站会类似于这样,
real 0m5.012s
user 0m0.003s
sys 0m0.001s
小站会多出1秒到N秒不等,但是100%会超过5秒。这个“5”,应该不会是巧合吧。
命令
strace curl
http://www.taobao.com/
发现卡在
send(3, "\t\353\1\0\0\1\0\0\0\0\0\0\3www\6taobao\3com\0\0\1\0\1", 32, MSG_NOSIGNAL) = 32
poll([{fd=3, events=POLLIN}], 1, 5000
这个位置,
这种现象在N个月前曾经发现过,但是持续的时间不长。有没有人出来说说到底在搞什么毛线?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您的描述,您在使用curl
命令抓取不同网站时遇到了普遍的延迟问题,所有请求的响应时间都在5秒以上,并且通过strace
跟踪发现请求在发送到淘宝网站时卡在了poll
调用上,等待数据返回。这种情况可能由几个因素引起:
网络延迟:首先,长时间的响应可能是由于网络延迟导致的。这包括您的本地网络状况、互联网线路质量以及目标服务器的网络状况。特别是如果多个地理位置的用户都遇到相似情况,更可能是互联网路由或目标服务器所在地区的网络拥堵。
DNS解析问题:虽然您直接使用了IP地址访问,但DNS解析过程中的问题也可能影响到后续的连接建立。有时候,DNS解析错误或者缓慢会导致连接初始化阶段的延迟。
服务器负载或限流:大流量的网站如淘宝、百度等,可能会实施流量控制策略,特别是在高峰时段或遭受DDoS攻击时,以保护服务器资源不被耗尽。这种情况下,服务器可能会故意延迟响应,或者对某些请求进行排队处理。
TCP握手和TLS协商:现代Web服务广泛采用HTTPS,这意味着每次请求都需要完成TCP三次握手和TLS握手过程。这个过程中任何环节的延迟都会影响整体响应时间,尤其是在全球范围内访问时,RTT(往返时间)会显著增加。
系统或内核设置:您提到的poll
调用等待5000毫秒(即5秒),这可能是操作系统或curl使用的默认超时设置。某些系统配置或内核参数可能会影响网络IO的行为,比如TCP参数的调整、socket超时设置等。
中间网络设备或防火墙:路由器、防火墙或其他网络设备的配置或性能问题也可能导致请求延迟。例如,安全设备可能会对特定类型的流量进行深度包检查,从而增加延迟。
解决这个问题,您可以尝试以下步骤: - 检查您的网络环境,包括更换DNS服务器、测试其他网络连接。 - 使用curl
时加上-v
或--verbose
选项查看详细的连接过程,帮助定位问题。 - 联系您的网络服务提供商,了解是否有已知的网络问题或维护。 - 如果是服务器端问题,需要联系网站管理员或服务提供商询问是否有限流策略或当前存在已知的服务中断。 - 考虑调整系统或curl的网络相关设置,比如超时时间,但需谨慎操作以免影响其他应用。
如果问题持续存在并影响广泛,建议关注相关的网络状态公告或技术论坛,看是否有其他人报告类似问题,或者是否有官方说明。