CURL очень медленно работает на PHP 7, но не на PHP 5

Мне кажется, что использование cURL значительно медленнее при использовании PHP7.0.11, чем при простом выполнении запроса из командной строки или при запуске в PHP5.6.24. Я тестирую его, используя следующий код:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://i.imgur.com/H1zC601.gif");
curl_setopt($curl, CURLOPT_HTTPGET, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
var_dump(curl_getinfo($curl));

И в интерпретаторе CLI PHP5 и PHP7, и в PHP5 я получаю

array(26) {
  ["url"]=>
  string(31) "https://i.imgur.com/H1zC601.gif"
  ["content_type"]=>
  string(9) "image/gif"
  ["http_code"]=>
  int(200)
  ["header_size"]=>
  int(597)
  ["request_size"]=>
  int(204)
  ["filetime"]=>
  int(-1)
  ["ssl_verify_result"]=>
  int(0)
  ["redirect_count"]=>
  int(0)
  ["total_time"]=>
  float(1.260002)
  ["namelookup_time"]=>
  float(0.060424)
  ["connect_time"]=>
  float(0.068474)
  ["pretransfer_time"]=>
  float(0.089705)
  ["size_upload"]=>
  float(0)
  ["size_download"]=>
  float(34327108)
  ["speed_download"]=>
  float(27243693)
  ["speed_upload"]=>
  float(0)
  ["download_content_length"]=>
  float(34327108)
  ["upload_content_length"]=>
  float(-1)
  ["starttransfer_time"]=>
  float(0.098354)
  ["redirect_time"]=>
  float(0)
  ["redirect_url"]=>
  string(0) ""
  ["primary_ip"]=>
  string(15) "151.101.124.193"
  ["certinfo"]=>
  array(0) {
  }
  ["primary_port"]=>
  int(443)
  ["local_ip"]=>
  string(14) "my IP"
  ["local_port"]=>
  int(44555)
}

Хотя при запуске PHP7, я получаю

array(26) {
  ["url"]=>
  string(31) "https://i.imgur.com/H1zC601.gif"
  ["content_type"]=>
  string(9) "image/gif"
  ["http_code"]=>
  int(200)
  ["header_size"]=>
  int(609)
  ["request_size"]=>
  int(61)
  ["filetime"]=>
  int(-1)
  ["ssl_verify_result"]=>
  int(0)
  ["redirect_count"]=>
  int(0)
  ["total_time"]=>
  float(16.875167)
  ["namelookup_time"]=>
  float(0.252648)
  ["connect_time"]=>
  float(0.260626)
  ["pretransfer_time"]=>
  float(0.280489)
  ["size_upload"]=>
  float(0)
  ["size_download"]=>
  float(34327108)
  ["speed_download"]=>
  float(2034178)
  ["speed_upload"]=>
  float(0)
  ["download_content_length"]=>
  float(34327108)
  ["upload_content_length"]=>
  float(-1)
  ["starttransfer_time"]=>
  float(0.288715)
  ["redirect_time"]=>
  float(0)
  ["redirect_url"]=>
  string(0) ""
  ["primary_ip"]=>
  string(15) "151.101.124.193"
  ["certinfo"]=>
  array(0) {
  }
  ["primary_port"]=>
  int(443)
  ["local_ip"]=>
  string(14) "my IP"
  ["local_port"]=>
  int(55559)
}

Важной частью является total_time, которое составляет 1,3 секунды в PHP 5, но 16,9 секунды в PHP 7.

Когда для запроса установлено время ожидания, количество полученных байтов пропорционально времени ожидания - данные передаются очень медленно, а не существует каких-либо препятствий, мешающих передаче чего-либо в течение некоторого времени, а затем переводится за один раз.

Сервер работает под управлением Debian, и я не могу воспроизвести проблему на моей локальной машине Fedora.

4 ответа

Та же проблема с PHP 7 на Debian Stretch. Я заметил высокие времена sys-cpu: пользователь 0.07s система 10.02s 92% процессор 10.859 всего

Проблема была решена после отключения прозрачного_человека:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

Это не влияет на загрузку curl напрямую, но замедляет выделение памяти php. См.: https://serverfault.com/questions/780555/how-to-troubleshoot-high-load-caused-by-php7

Для меня это выглядит как проблема задержки в сети или пропускной способности. Если вы изучите speed_download между ними вы увидите, что один загружается значительно быстрее другого. Первый результат с использованием PHP 5/7-CLI показывает "speed_download" => float(27243693) в то время как второй показывает "speed_download" => float(2034178)в то время как они оба имеют одинаковую длину контента "download_content_length" => float(34327108),

Таким образом, первый загружает файл ~32,7 МБ со скоростью ~25,9 МБ / с, а второй загружает тот же файл со скоростью ~1,9 МБ / с. Очевидно, что второе заняло бы намного больше времени.

У меня та же проблема с curl onPHP 7.0.12. Я работаю в режиме cli и fpm и загружаю очень медленную скорость, скорость снижается с 100 Мбит / с до всего 1~2 Мбит / с, я переключаюсь на php 5.6 и устраняю проблемы, так что это не проблема сети, я уверен, что надеюсь, моя информация поможет кому-то

Вы можете увидеть такие версии php-curl:

php5 --ri curl php7 --ri curl

Иногда, более низкая версия может вызвать это.

Другие вопросы по тегам