AWS S3 PHP: тонны несовместимых ошибок 408 и cURL 28, тайм-ауты / задержки / зависания каждые несколько секунд - PullRequest
0 голосов
/ 08 декабря 2018

Справочная информация. У меня на Dreamhost хранилище объектов объемом 250 ГБ.Я использую AWS S3 Client (PHP) для загрузки файлов на него.Это работало отлично в течение нескольких месяцев, пока они не перенесли свой сервер с западного побережья на восточное побережье.Единственными изменениями (очень маленькими и простыми) в моих скриптах стал новый URL / регион хоста.В моем ведре в среднем около 1 миллиона фотографий / миниатюр размером от 10 до 100 КБ.

С тех пор в течение 2 месяцев некоторые фотографии будут загружаться нормально, а в половине случаев загрузка фотографии приведет к 400500 ошибок.Мы связались со службой поддержки 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 раза, но при четвертом обновлении страница продолжает «зависать» в течение длительного времени и, наконец, может отображать корзину после задержки в 150 секунд,или сценарий может быть просто тайм-аут.Dreamhost заметил то же самое, когда настраивал пример на базовом экземпляре облачного сервера: список сегментов может загружаться сразу или через 60 секунд, 120 секунд, 180 секунд и т. Д. Подсказка: похоже, что он загружается с шагом в 30 секунд,(эти 180, 150, 120, 60 раз делятся на 30).

Я надеюсь, что кто-то понимает, что здесь происходит.Проблема настолько серьезна, что у нас на рынке есть сотни несчастных продавцов, которым трудно выкладывать новые продукты для продажи из-за этой проблемы с загрузкой изображений, из-за которой у них практически невозможно перечислить изображения, а их браузеры "зависают"».Что еще хуже, эти проблемы с тайм-аутом при загрузке изображений приводят к тайм-ауту всех моих 40 процессов PHP, что также косвенно вызывает 500 внутренних ошибок сервера для посетителей сайта.Наш сайт не имеет такого большого трафика, может быть, 10 000 посетителей в день.Опять же, это удивительно, что Dreamhost был поставлен в тупик месяцами, они говорят, что я единственный клиент, у которого есть проблема.

Другая информация, на которой работает мой сервер: Ubuntu 16.04 Apache 2.4.33 PHP-FPM (7.0) cURL 7.47.0 AWS S3 SDK для PHP 3.81.0 Включены HTTPS и HTTP / 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...