使用curl_multi_exec获取数据时内存使用过多


Fetching data with curl_multi_exec excessive memory usage

使用curl_multi_exec获取数据会导致大量内存使用。我试着调试它,这就是内存使用率开始上升的地方。

do {
    $mrc = curl_multi_exec($mh, $active);
    var_dump("Curl exec ".memory_get_usage());
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active) {
    var_dump("Check active ".memory_get_usage());
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

我在这里获取的url每个都有大约3mb的JSON格式的原始数据,其中有四个,所以理论上应该需要大约12mb的内存,对吧?

string(17) "Curl exec 1697936"
string(20) "Check active 1697936"
string(20) "Check active 1947536"
string(20) "Check active 2373824"
string(20) "Check active 3012800"
string(20) "Check active 3852224"
string(20) "Check active 4966336"
string(20) "Check active 5801920"
string(20) "Check active 6850800"
string(20) "Check active 7882992"

PHP版本5.3.6

memory_get_usage()返回以字节为单位的值!这是文件http://php.net/manual/en/function.memory-get-usage.php从这个角度来看,这些值似乎并不奇怪,7882992字节是7.88MB。