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
Иногда, более низкая версия может вызвать это.