代码之家  ›  专栏  ›  技术社区  ›  peppy

awss3php:每隔几秒钟就会出现大量不一致的408和curl28错误、超时/延迟/挂起

  •  0
  • peppy  · 技术社区  · 7 年前

    背景:我在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

    0 回复  |  直到 7 年前
    推荐文章