2012-08-15 10 views
5

Ich habe dieses Problem mit einer Schleife mit cURL wo Speicher exponentiell wächst. In diesem Beispielskript werden ungefähr 14 MB Arbeitsspeicher verwendet und es endet mit 28 MB. Mit meinem ursprünglichen Skript und der Wiederholung auf 1.000.000 wird der Arbeitsspeicher auf 800 MB erhöht, was schlecht ist.cURL Schleife Speicherwachstum

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

Haben Sie 'curl_multi_init' versucht? Vielleicht hilft es. http://tr.php.net/manual/en/function.curl-multi-init.php –

+0

Ich versuche curl_multi, das ist das gleiche Problem, auch wenn es langsamer ist. – user1173536

Antwort

0

Eine Lösung curl nennen weniger (etwa 100 mal) sein würde und dann Seite zu aktualisieren, die der Speicher freigegeben werden zulassen.

4

Ich denke, ich habe eine Lösung für das Speicherleck gefunden. Ich habe das gleiche Problem mit curl lib in einem PHP-Skript. Nach wiederholten Aufrufen der Funktion curl_exec() wird der Speicher verbraucht.

Nach einem PHP bug report dieses Speicherleck behoben werden kann, nachdem die Curl-Handler unsetting es zu schließen, wie nächster Code:

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

Danke, aber das ist in meinem Code und keine Wirkung. Gedächtnis noch Wachstum – user1173536

0

Das ist spät, aber ich empfehle gegen curl_close in diesem Fall verwendet wird, oder wenn Sie mach es, indem du es außerhalb der for-Schleife platzierst.

Wir hatten ein ähnliches Problem, bei dem der Lockenspeicher nach vielen Schleifen undicht wurde. Wir benutzten curl_multi und schlossen jeden der einzelnen Handler, was unser Gedächtnis in den Wahnsinn trieb. Das Überschreiben des Handlers mit dem curl_init scheint mehr als genug zu sein. Es scheint ein Problem mit curl_close zu geben.

Verwandte Themen