cURL 循环内存增长


cURL loop memory growth

我在使用 cURL 的循环中遇到了这个问题,其中内存呈指数级增长。在此示例脚本中,它开始使用大约 14MB 的内存,以 28MB 结束,使用我的原始脚本并重复到 1.000.000,内存增长到 800MB,这很糟糕。

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

我想我找到了内存泄漏的解决方法。我在 PHP 脚本中使用 curl lib 遇到了同样的问题。重复调用 curl_exec() 函数后,内存会耗尽。

根据 PHP 错误报告,此内存泄漏可能会在关闭 Curl 处理程序后取消设置它,如下所示:

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

这已经很晚了,但我建议在这种情况下不要使用 curl_close,或者如果你这样做,请将其放在 for 循环之外。

我们有一个类似的问题,在多次循环后,curl 内存开始泄漏。我们使用curl_multi并关闭每个单独的处理程序,这导致我们的记忆变得疯狂。用curl_init覆盖处理程序似乎绰绰有余。curl_close似乎有问题。

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