背景:我在Dreamhost有一个250GB的对象存储。我使用awss3客户端(PHP)上传文件到它。在他们将服务器从西海岸迁移到东海岸之前,它一直运行良好。我的脚本唯一的变化(非常小和简单)是一个新的主机URL/区域。我的bucket有大约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
为了缩小问题的范围,我还做了一些最简单的示例,比如列出bucket(Dreamhost教程示例),同样的行为也会发生——甚至在一个新的测试bucket中有一个图像。如果我每隔几秒钟刷新一次浏览器,它可能会成功地列出bucket 2-3次,但是在第4次刷新时,页面会继续“挂起”很长时间,最后可能会在延迟150秒后显示bucket,或者脚本可能只是超时。当他们在一个基本云服务器实例上设置一个示例时,Dreamhost注意到了同样的事情:bucket list可能会立即加载,或者在60秒、120秒、180秒等之后加载。一个线索是:它似乎是在30秒增量之后加载的(这180、150、120、60次都可以被30整除。
我希望有人能理解这里发生了什么。问题是如此糟糕,我们的市场上有数百个不高兴的商家,他们很难将新产品上市销售,因为这个图片上传问题使他们几乎无法列出图片,并导致他们的浏览器“挂起”。更糟糕的是,这些图片上传超时问题导致我的40个PHP进程全部超时,这也间接导致网站访问者出现500个内部服务器错误。我们的网站没有
那个
流量很大,每天可能有10000名游客。同样,令人惊讶的是,Dreamhost已经被难住几个月了,他们说我是他们唯一有问题的客户。
其他信息,我的服务器正在运行:
Ubuntu 16.04版
Apache 2.4.33版
PHP-FPM(7.0版)
卷曲7.47.0
启用HTTPS和HTTP/2