简体   繁体   中英

cURL loop memory growth

I have this problem with a loop using cURL where memory grows exponentially. In this example script, it starts using approximately 14MB of memory and ends with 28MB, with my original script and repeating to 1.000.000, memory grows to 800MB, which is bad.

PHP 5.4.5
cURL 7.21.0

for ($n = 1; $n <= 1000; $n++){

    $apiCall = 'https://api.instagram.com/v1/users/' . $n . '?access_token=5600913.47c8437.358fc525ccb94a5cb33c7d1e246ef772';

    $options = Array(CURLOPT_URL => $apiCall,
                     CURLOPT_RETURNTRANSFER => true,
                     CURLOPT_FRESH_CONNECT => true
    );

    $ch = curl_init();
    curl_setopt_array($ch, $options);
    $response = curl_exec($ch);
    curl_close($ch);

    unset($ch);
}

I think I found a fix to the memory leak. I've got the same problem using curl lib in a PHP script. After repeated calls to curl_exec() function, memory becomes exhausted.

According to a PHP bug report this memory leak may be fixed unsetting the Curl handler after closing it, like next code:

...
curl_close($ch);
unset($ch);

一种解决方案是调用curl(比如100次)然后刷新页面,这可能允许释放内存。

This is late, but I recommend against using curl_close in this instance, or if you do, placing it outside the for loop.

We had a similar issue where curl memory started leaking after many loops. We were using curl_multi and closing each of the individual handlers, which caused our memory go bonkers. Overwriting the handler with the curl_init seems to be more than enough. There seems to be an issue with curl_close.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM