我注意到在尝试获取网站时出现了一种奇怪的延迟模式。这种行为看起来非常有特色,并且对我来说很容易复制,因此我对下面的大多数细节都充满信心。我希望有人能认出它,或者能够解决它。
据我所知,延迟的时间似乎随着自重新启动计算机以来的时间而增加。与其他几点相比,这没有经过仔细测试,但是我相信重新启动可以解决该问题,并且重启后的最初几个小时内很少出现(并且可以解决的时间长得多)。
延迟会出现在Firefox,Safari或Chrome中。
卷曲正常。但是,在Chrome,Safari或Firefox中的任何一个加载页面时,curl都会遇到很大的延迟。关闭浏览器将立即导致所有正在运行的curl作业成功完成(例如,我可以启动5个curl实例来获取不同的网站,所有这些实例都将在进度栏中停止,显示没有进度;关闭Chrome会导致所有作业即可立即完成)。
即使延迟存在,卷曲延迟也比网站延迟小得多。现在大约是15秒,因为我已经有一段时间没有重新启动了,希望对其进行调试。一个网站将花费更长的时间,可能在“等待www.---.com”时花费15秒,然后等待可观的时间。
问题期间延迟(如ping所报告)不会增加。
虽然卷曲会延迟,但不同的卷曲作业将同时完成。也就是说,它们都将挂起很长时间,然后全部停止在同一时刻挂起(因此,它们大致在同一时间结束,挂起的时间超过15秒)。有时,这会在浏览器中发生,但不是可靠的(我认为这可能是因为浏览器在实际完成加载页面之前有多个机会挂起)。卷发作业完成后,立即重新启动它们会导致它们以完全相同的方式挂起,因此并不是问题得以解决(至少不会持续很长时间)。
网页之间的延迟差异很大。我还没有做过非常详细的调查(我想这将是下一步)。
当挂起时,curl -v挂在进度条上,不传输任何数据。
在Chrome中加载页面时,大部分时间都用于“等待” CDN和第三方服务。
Chrome通常会显示黑屏,然后按“停止”将导致页面呈现(加载了大多数但不是全部资产)。我认为这与最后一点有关,只是当我们有这么长的延迟时出现的chrome行为,而不是与问题密切相关。
当连接到具有不同性能特征的许多不同无线网络(例如50mbps线路)时,就会出现延迟。我没有尝试过有线网络,尽管我认为这没有关系。
同样,使用不同的DNS也没有区别(考虑到ping总是可以的,这不足为奇)。
我观察到在系统压力水平非常不同的情况下,相同的行为。例如,现在我有3/8 GB可用内存。