我的应用程序正在抓取一个网站。我使用这个爬虫:
在我的开发环境中,延迟是可以接受的(3-4 秒),但在我的生产服务器(ec2 T2.micro Linux/Amazon)上,延迟有 30 秒(等待 ttfb)。
我在另一台服务器(1&1)上测试了相同的代码,延迟在可接受范围内(3-4 秒)。因此问题不在于代码本身,而是关于服务器配置。
我努力了 :
- 检查 php 配置 (php.ini)
- 为 php 添加缓存(Zend OPCache)
- 添加 apache 2 evolve:accept-encoding 标头
- 测试 t2.medium 实例
- 更改我的实例的区域
我发现了类似的问题: PHP + Apache 等待时间过长但我认为我的 ec2 卷是 EBS SSD,因此不存在访问时间问题。
这个未解决的问题也链接到我的:https://stackoverflow.com/questions/34299038/deployed-web-application-long-ajax-wait-ttfb-time
请求期间的 vmstat 摘录:
[ec2-user@ip-xxx-xx-xx-xx ~]$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 1580 534472 29696 240356 0 0 2 31 14 41 0 0 100 0 0
0 0 1580 534456 29696 240356 0 0 0 0 19 43 0 0 100 0 0
0 0 1580 534456 29696 240356 0 0 0 0 12 37 0 0 100 0 0
0 0 1580 534456 29696 240356 0 0 0 0 12 38 0 0 100 0 0
0 0 1580 534456 29696 240356 0 0 0 0 15 45 0 0 100 0 0
0 0 1580 534456 29696 240356 0 0 0 0 18 49 0 0 100 0 0
0 0 1580 534456 29696 240356 0 0 0 0 12 38 0 0 100 0 0
0 0 1580 533544 29696 240356 0 0 0 0 32 60 0 0 100 0 0
0 0 1580 533544 29696 240356 0 0 0 0 13 39 0 0 100 0 0
0 0 1580 533544 29696 240356 0 0 0 0 17 45 0 0 100 0 0
0 0 1580 533544 29696 240356 0 0 0 4 16 49 0 0 100 0 0
0 0 1580 533544 29696 240356 0 0 0 0 13 40 0 0 100 0 0
0 0 1580 533544 29696 240356 0 0 0 0 13 38 0 0 100 0 0
0 0 1580 533544 29696 240356 0 0 0 0 13 38 0 0 100 0 0
0 0 1580 533544 29696 240356 0 0 0 0 16 47 0 0 100 0 0
0 0 1580 533544 29700 240352 0 0 0 4 17 48 0 0 99 1 0
0 0 1580 533544 29700 240356 0 0 0 0 15 39 0 0 100 0 0
0 0 1580 533544 29700 240356 0 0 0 0 13 39 0 0 100 0 0
0 0 1580 533544 29700 240356 0 0 0 0 13 39 0 0 100 0 0
0 0 1580 533544 29700 240356 0 0 0 0 17 46 0 0 100 0 0
0 0 1580 533544 29700 240356 0 0 0 4 19 50 0 0 100 0 0
0 0 1580 533544 29700 240356 0 0 0 0 15 41 0 0 100 0 0
[更新]
现在我知道这个延迟是由于 GuzzleHttp\Client 请求造成的:
(string) $this->httpClient->get($url)->getBody();
我的安全组似乎没问题,所有出站流量都允许,入站流量也允许 HTTP。我的网络出站流量似乎也没什么问题(我请求时为 40,000 - 50,000 字节)。
我认为这应该是 mpm_prefork_module 的问题......
[更新 2]
从 SSH,如果我 curlhttp://google.fr,我没有延迟。如果我 curl 我的特定网址(http://www.leboncoin.fr) 延迟 >30 秒。它特定于我的 AWS Ec2,具有此 URL。