AWS S3 PHP:大量不一致的408和cURL 28错误,每隔几秒钟就会发生超时/延迟/挂起

时间:2018-12-08 01:17:42

标签: php amazon-web-services amazon-s3 aws-sdk

背景:我在Dreamhost上有250 GB的对象存储空间。我正在使用AWS S3客户端(PHP)将文件上传到它。在他们将服务器从西海岸迁移到东海岸之前,它工作了好几个月。对脚本的唯一更改(非常小而简单)是新的Host URL /区域。我的存储桶中平均大约有100万张照片/缩略图,大小约为10kb-100kb。

此后的2个月内,有些照片会上传成功,然后有一半的时间上传照片会导致400/500错误。我们联系了Dreamhost支持,他们已经被困了2个月,无法解决问题。这是我们日志中的错误类型:

[05-Dec-2018 12:28:27 UTC] PHP Fatal error:  Uncaught exception 'Aws\S3\Exception\S3Exception' with message 'Error executing "PutObject" on "https://objects-us-east-1.dream.io/mybucket/img.jpg"; AWS HTTP error: Client error: `PUT https://objects-us-east-1.dream.io/mybucket/img.jpg` resulted in a `408 Request Time-out` response:
<html><body><h1>408 Request Time-out</h1>
Your browser didn't send a complete request in time.
</body></html>

(client):  - <html><body><h1>408 Request Time-out</h1>
Your browser didn't send a complete request in time.
</body></html>
'

GuzzleHttp\Exception\ClientException: Client error: `PUT https://objects-us-east-1.dream.io/mybucket/img.jpg` resulted in a `408 Request Time-out` response:
<html><body><h1>408 Request Time-out</h1>
Your browser didn't send a complete request in time.
</body></html>

 in /home/username/mysite.com/includes/cdn/aws/GuzzleHttp/Exception/RequestException.php:113
 in /home/username/mysite.com/includes/cdn/aws/Aws/WrappedHttpHandler.php on line 191



[05-Dec-2018 12:44:21 UTC] PHP Fatal error:  Uncaught exception 'Aws\S3\Exception\S3Exception' with message 'Error executing "PutObject" on "https://objects-us-east-1.dream.io/mybucket/img.jpg"; AWS HTTP error: cURL error 28: Operation timed out after 0 milliseconds with 0 out of 0 bytes received (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)'

GuzzleHttp\Exception\ConnectException: cURL error 28: Operation timed out after 0 milliseconds with 0 out of 0 bytes received (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) in /home/username/mysite.com/includes/cdn/aws/GuzzleHttp/Handler/CurlFactory.php:186
Stack trace:
#0 /home/username/mysite.com/includes/cdn/aws/GuzzleHttp/Handler/CurlFactory.php(150): GuzzleHttp\Handler\CurlFactory::createRejection(Object(GuzzleHttp\Handler\EasyHandle), Array)
#1 /home/username/mysite.com/includes/cdn/aws/GuzzleHttp/Handler/CurlFactory.php(103): GuzzleHttp\Handler\CurlFactory::finishError(Object(GuzzleHttp\Handler\CurlMultiHandler), Object(GuzzleHttp\H in /home/username/mysite.com/includes/cdn/aws/Aws/WrappedHttpHandler.php on line 191

为了缩小问题的范围,我还做了最简单的示例,例如列出存储桶(Dreamhost教程示例),并且即使在其中包含1张图像的新测试存储桶上,也发生了相同的行为。如果我每隔几秒钟刷新一次浏览器,它可能会成功列出存储桶2-3次,但是在第4次刷新时,页面会长时间“挂起”,并且可能会在延迟150秒后最终显示存储桶,否则脚本可能只是超时。 Dreamhost在基本云服务器实例上设置示例时注意到了同样的事情:存储桶列表可能会立即加载,也可能会在60秒,120秒,180秒等之后加载。提示:似乎是在30秒增量后加载。 (这些180、150、120、60倍都可以被30整除)。

我希望有人能理解这里发生的事情。问题是如此严重,以至于我们市场上有数百个不高兴的商人很难列出要出售的新产品,因为这个图像上传问题使他们几乎无法列出图像,并导致他们的浏览器“挂起” ”。更糟的是,这些图像上传超时问题导致我所有的40个PHP进程都超时,这也间接导致了网站访问者的500个内部服务器错误。我们的网站没有那么多的流量,每天可能有10,000位访问者。再次令人惊讶的是,Dreamhost已经困扰了几个月,他们说我是他们唯一遇到此问题的客户。

其他信息,我的服务器正在运行: Ubuntu 16.04 阿帕奇2.4.33 PHP-FPM(7.0) 网址7.47.0 适用于PHP 3.81.0的AWS S3 SDK 启用HTTPS和HTTP / 2

0 个答案:

没有答案