cURL кажется значительно медленнее для меня, используя PHP7.0.11, чем при запуске запроса из командной строки или при запуске в PHP5.6.24. Я тестирую его, используя следующий код:
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://img.ruphp.com/php/H1zC601.gif"); curl_setopt($curl, CURLOPT_HTTPGET, TRUE); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $output = curl_exec($curl); var_dump(curl_getinfo($curl));
В PHP5 и PHP7 интерпретатор CLI, а в PHP5 я получаю
array(26) { ["url"]=> string(31) "http://img.ruphp.com/php/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) "http://img.ruphp.com/php/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.9s в PHP 7.
Когда тайм-аут задается в запросе, количество полученных байтов пропорционально таймауту – данные передаются очень медленно, вместо того, чтобы иметь какое-то препятствие, которое мешает чему-либо переноситься на некоторое время, тогда все переданы за один раз.
На сервере работает Debian, и я не могу воспроизвести проблему на моей локальной машине Fedora.
Такая же проблема с PHP 7 на Debian Stretch. Я заметил высокие времена sys-cpu: 0.07s пользователь 10.02s система 92% cpu 10.859 всего
Проблема была решена после отключения прозрачной_страницы:
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
Он не влияет на загрузку курсора напрямую, но замедляет распределение памяти 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 и устраняю проблему, поэтому не проблема с сетью, я уверен, надеюсь, что моя информация поможет кому-то