2012-08-15 7 views
5

मुझे इस समस्या को curl का उपयोग करके लूप के साथ है जहां स्मृति तेजी से बढ़ती है। इस उदाहरण स्क्रिप्ट में, यह लगभग 14 एमबी मेमोरी का उपयोग शुरू करता है और मेरी मूल स्क्रिप्ट के साथ 28 एमबी के साथ समाप्त होता है और 1.000.000 को दोहराता है, स्मृति 800 एमबी तक बढ़ता है, जो खराब है।कर्ल लूप मेमोरी ग्रोथ

पीएचपी 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

क्या आपने 'curl_multi_init' को आजमाया था? शायद यह मदद करता है। http://tr.php.net/manual/en/function.curl-multi-init.php –

+0

मैं curl_multi कोशिश करता हूं, यह एक ही समस्या है, यहां तक ​​कि यह धीमा है। – user1173536

उत्तर

0

एक समाधान कर्ल कम (कहते हैं कि 100 बार) कॉल करने के लिए और उसके बाद ताज़ा करने के लिए पेज, अनुमति दे सकता है जो स्मृति मुक्त किया जाएगा।

4

मुझे लगता है कि मुझे स्मृति रिसाव के लिए एक फिक्स मिला है। मुझे एक PHP स्क्रिप्ट में कर्ल lib का उपयोग कर एक ही समस्या है। Curl_exec() फ़ंक्शन को बार-बार कॉल करने के बाद, स्मृति समाप्त हो जाती है।

एक PHP bug report के अनुसार इस स्मृति रिसाव बंद करने में, कोड की तरह के बाद कर्ल हैंडलर unsetting निर्धारित किया जा सकता:

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

धन्यवाद, लेकिन यह मेरे कोड में है, और कोई प्रभाव नहीं है। मेमोरी अभी भी विकास – user1173536

0

यह देर हो चुकी है, लेकिन मैं इस उदाहरण में curl_close उपयोग करने के खिलाफ सलाह देते हैं, या यदि आप लूप के बाहर इसे रखकर करो।

हमारे पास एक समान समस्या थी जहां कई लूप के बाद कर्ल मेमोरी लीक हो गई। हम curl_multi का उपयोग कर रहे थे और प्रत्येक व्यक्तिगत हैंडलर को बंद कर रहे थे, जिससे हमारी स्मृति बोनकर्स हो गई। Curl_init के साथ हैंडलर को ओवरराइट करना पर्याप्त से अधिक प्रतीत होता है। Curl_close के साथ एक मुद्दा प्रतीत होता है।