簡體   English   中英

PHP內存泄漏問題

[英]Php memory leak question

XML解析腳本泄漏PHP中的某些內存時,我遇到了很多可怕的問題。

我已經通過將整個OOP代碼重寫為非OOP(主要是數據庫檢查和插入)來解決問題,這似乎可以解決問題,但是我很好奇是什么原因引起的? 我使用的是Zend Framework,一旦刪除了所有模型內容,就不會泄漏。

只是為了告訴您問題有多嚴重:我正在使用相同數量的文件處理大約3萬個項目。 因此,每個文件一個。 它開始使用5mb! 或RAM,而文件本身只有大約20kb。

難道是我所讀過的那些引用函數? 我以為該錯誤已修復?

編輯

我發現泄漏是由於使用Zend Framework數據庫類造成的。 有沒有一種方法可以在每次迭代后調用關閉函數,以便清除資源?

回答這個問題非常困難,因為我們沒有可使用的代碼。

返回源的OOP版本,並創建一個小類,如下所示:

abstract class MemoryLeakLogger
{
     public static $_logs = array();

     public function Start($id,$action)
     {
          self::$_logs[$id] = array(
              'action' => $action,
              'start_ts' => microtime(),
              'memory_start' => memory_get_usage()
          );
     }

     public function End($id)
     {
          self::$_logs[$id]['end_ts'] = microtime();
          self::$_logs[$id]['memory_end'] = memory_get_usage();
     }

     public static function GetInformation(){return self::$_logs;}
}

然后在您的應用程序中執行以下操作:

MemoryLeakLogger::Start(":xml_parse_links_set_2", "parsing set to of links");
/*
    * Here you would do the relative code
*/
MemoryLeakLogger::End(":xml_parse_links_set_2");

在整個應用程序中,依此類推,您將需要創建計算來收集內存使用量和每個操作所花費的時間的偏移量,一旦腳本完成,只需以可讀的方式打印信息來調試信息並尋找峰值

您還可以使用xdebug跟蹤您的應用程序。

希望這可以幫助

暫無
暫無

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

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