Попытки выполнить следующий код с жрать 5.жрать отправить() метод вызывает Curl ошибку 35 Слишком много открытых файлов
$client = new GuzzleClient(['defaults/headers/User-Agent' => static::$userAgentString]);
$request = $client->createRequest(static::$serviceRequestMethod, $url, $options); // Create signing request.
$signature = new Signature\Signature($this->accessKey, $this->secretKey);
$options = array_merge_recursive($options, ['query' => ['Signature' => $signature->signString($hash)]]);
$request = $client->createRequest(static::$serviceRequestMethod, $url, $options); // Create real request.
$response = $client->send($request);
Когда я называю эту линию достаточно времени на длительном процессе CLI бегового, я получаю следующая ошибка восходит к линии $response = $client->send($request);
cURL error 35: error:02001018:system library:fopen:Too many open files
После этого хитов, каждый веб-страница и команды на сервере срываются с той же ошибкой «слишком много открытых файлов».
Вот трассировки стека:
#0 /home/vagrant/code/example.com/vendor/guzzlehttp/guzzle/src/RequestFsm.php(104): GuzzleHttp\Exception\RequestException::wrapException(Object(GuzzleHttp\Message\Request), Object(GuzzleHttp\Ring\Exception\ConnectException))
#1 /home/vagrant/code/example.com/vendor/guzzlehttp/guzzle/src/RequestFsm.php(132): GuzzleHttp\RequestFsm->__invoke(Object(GuzzleHttp\Transaction))
#2 /home/vagrant/code/example.com/vendor/react/promise/src/FulfilledPromise.php(25): GuzzleHttp\RequestFsm->GuzzleHttp\{closure}(Array)
#3 /home/vagrant/code/example.com/vendor/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php(55): React\Promise\FulfilledPromise->then(Object(Closure), NULL, NULL)
#4 /home/vagrant/code/example.com/vendor/guzzlehttp/guzzle/src/Message/FutureResponse.php(43): GuzzleHttp\Ring\Future\CompletedFutureValue->then(Object(Closure), NULL, NULL)
#5 /home/vagrant/code/example.com/vendor/guzzlehttp/guzzle/src/RequestFsm.php(135): GuzzleHttp\Message\FutureResponse::proxy(Object(GuzzleHttp\Ring\Future\CompletedFutureArray), Object(Closure))
#6 /home/vagrant/code/example.com/vendor/guzzlehttp/guzzle/src/Client.php(165): GuzzleHttp\RequestFsm->__invoke(Object(GuzzleHttp\Transaction))
#7 /home/vagrant/code/example.com/app/library/amazon/src/AWS.php(540): GuzzleHttp\Client->send(Object(GuzzleHttp\Message\Request))
Я не знаю ни необходимости явно закрывать ресурс после отправки запроса через жрать. Я что-то упустил, или это может быть ошибкой в Гузле?
Можете ли вы определить «достаточно времени»? Как долго работает процесс? По собственному упущению это звучит так, будто вы нажимаете один из пределов PHP. Сколько из ваших запросов вы пытаетесь выполнить параллельно? Является ли GuzzleHttp \ Pool жизнеспособным вариантом для вас? –
@ShaunBramley Должно быть более конкретным в том, что «достаточно времени» варьируется в 5000+ запросов на получение/отправку из этого сценария и работает от 2 минут до 2 часов в зависимости от количества записей в очереди. Ни один из них не выполняется параллельно. Каждый из них выполняется последовательно из-за кода, который зависит от него. – eComEvo
Является ли обновление до Guzzle 6 вариантом для вас? –