PHP内存泄漏问题

时间:2010-12-29 00:57:03

标签: php zend-framework memory-leaks

我在XML解析脚本中泄漏了一些内存,但是我遇到了很多问题。

我通过将我的整个OOP代码重写为非OOP(主要是数据库检查和插入)来解决这个问题,但是我很好奇是什么导致了它?我正在使用Zend Framework,一旦删除了所有模型,就没有泄漏。

只是为了让你知道它有多糟糕: 我在相同数量的文件上运行了大约30k项目。所以,每个文件一个。它开始时使用5mb !!!或RAM,当文件本身只有大约20kb。

可能是我读过的那些引用功能吗?我认为那个错误已修复了?!

修改

我发现泄漏是由于使用Zend Framework数据库类造成的。有没有办法在每次迭代后调用一个关闭函数,以便清除资源?

1 个答案:

答案 0 :(得分:1)

由于我们没有可以使用的代码,所以很难回答这个问题。

恢复到源代码的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");

在整个应用程序中,您将需要创建计算以收集内存使用的偏移量和每个操作所需的时间,一旦您的脚本完成,只需通过以可读方式打印信息来调试信息并查找峰值< / p>

您还可以使用xdebug跟踪您的申请。

希望这有帮助