簡體   English   中英

PHP卷曲,使用CURLOPT_SSL_VERIFYPEER時發生內存泄漏,為true

[英]PHP curl, memory leak when using CURLOPT_SSL_VERIFYPEER, true

我使用cloudfusion已經有一段時間了,需要切換到較新版本的AWS sdk並遇到內存泄漏。 據報告,內存泄漏已使用了大約一年,沒有一個真正的解決方案。 經過大量閱讀,運行測試和調查結果之后,以下簡單的守護程序重現了該問題:

#! /usr/bin/env php
<?php class httpsTest{
    function curlHttps($memLeak=false){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, 'https://sqs.us-east-1.amazonaws.com');
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $memLeak);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_exec($curl);
        curl_close($curl);
    }
}
gc_enable();
$myPid = getmypid();$i=0;
$test  = new httpsTest();
while ($test){
    $test->curlHttps(true);
    echo $i++ ." PHP Info MemUsage: ".memory_get_usage() ."    Linux Info ";
    system('cat /proc/' .$myPid .'/status|grep '.'"VmSize"');
    sleep(1);
}

因此,當使用值為true的CURLOPT_SSL_VERIFYPEER時,每18次迭代將泄漏132 KB。 為了確保我不打敗老家伙,fedora 14系統已用php 5.3.10,libcurl 7.24.0.-1.0,nss-3.12.10-7,openssl-1.0.0e-1更新。

我無法想象沒有人遇到過這種情況,盡管當您僅依靠php內存報告時看起來一切都很好。 可以肯定的是,我已經向php專家報告了它,但是php似乎做對了,並且在使用的庫中創建了泄漏。

我該怎么做才能收集有用的信息以解決此問題,我檢查了泄漏的堆,並清楚地看到了泄漏情況和無泄漏情況的區別。 在泄漏的情況下,堆的頂部填充了大部分16個字節的對象,這些對象的地址同時又為空。 因此,看起來對象已被清空但沒有釋放。

非常感謝您的任何建議

當進行許多HTTPS連接時,該問題仍然發生。 檢查一下https://bugs.php.net/bug.php?id=76542

堅持curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM