2016-09-24 141 views
1

PHP7.0.11を使用すると、コマンドラインから要求を実行しているときやPHP5.6.24で実行したときよりもcURLがかなり遅くなります。私は、次のコード使用して、それをテストしています:PHP5とPHP7のCLIインタプリタ両方でcURLはPHP 7では非常に遅いですが、PHP 5ではありません。

$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)); 

を、そして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) 
} 
を得る一方で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) 
} 

を取得します

重要な部分はtotal_timeで、PHP 5では1.3秒、PHP 7では16.9秒です。

タイムアウトが要求に設定されている場合、受け取ったバイト数はタイムアウトに比例します。データが非常にゆっくりと転送されています。何も妨げられずに何かが転送されないようにしてから、行く。

サーバーでDebianが実行されているため、Fedoraローカルマシンで問題を再現できないようです。

+0

これは同じサーバーですか? – ceejayoz

+0

@ceejayozはい、すべてのテスト(PHP7、PHP5およびコマンドラインカール(私は正確な数値はありませんが、PHP5とほぼ同じ速度です))は同じサーバー上で実行されました。 – JackW

+0

これは仮想マシンで実行していますか? – Sherif

答えて

0

私にとっては、これはネットワークの待ち時間の問題や帯域幅の問題のように見えます。この2つの間でspeed_downloadを調べると、もう一方が大幅に高速にダウンロードされていることがわかります。 PHP 5/7-CLIを使用した最初の結果は"speed_download" => float(27243693)で、2番目の結果は"speed_download" => float(2034178)ですが、両方とも同じコンテンツ長の"download_content_length" => float(34327108)です。

最初のファイルは〜32.9MB /秒でダウンロードし、2番目のファイルは〜1.9MB /秒でダウンロードします。明らかに第二のものはもっと長い時間がかかります。

+0

しかし、両方が同じサーバー上で実行されているので、結果を確実に再現できるため、ランダムなスパイクではありません。 – JackW

+0

私はあなたを信じていますが、ここにPHPが不完全であることを示す証拠はありません。インバウンドの帯域幅をポート単位で抑制したり、ソフトウェアベースのプロセスであっても、どこかでネットワーク構成を変更することができます。問題の原因は不明だが、データはPHPの問題ではなく、帯域幅の問題を指している。 – Sherif

+0

別の言い方をすると、転送速度が遅い場合、PHPは転送を完了するのに必要な速度よりも速く終了するとは考えられません。しかし、なぜPHPのあるバージョンが他のバージョンのPHPよりも遅いファイルをダウンロードしているのかという疑問は、そのシステムのネットワーキング設定を詳しく調査せずに完全に未知のままです。 PHP 5とPHP 7の両方でローカルでコードを実行しただけで、同じ速度でダウンロードすると一貫した結果が得られたことが分かります。だから、大規模なPHPの表示はありません。あなたの設定に固有のものでなければなりません。 – Sherif

0

curl onPHP 7.0.12と同じ問題があります.cliモードとfpmモードの両方で動作し、非常に遅い速度をダウンロードすると、速度は100Mbpsから1〜2 Mbps/sに低下し、私はPHP 5.6に切り替えて問題を解決します、それはネットワークの問題ではない、私は確信しています 私の情報が誰かを助けることを願って

1

Debian StretchでPHP 7と同じ問題が発生しました。私は、高SYS-CPU時間を気づいた:それは直接カールのダウンロードには影響しません

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

が、PHPのメモリを遅くする:0.07sユーザー10.02sシステム92%のCPU 10.859合計

問題が無効transparent_hugepage後に解決しました割り当て。参照:https://serverfault.com/questions/780555/how-to-troubleshoot-high-load-caused-by-php7

関連する問題