【问题标题】:Php memory leak questionphp内存泄漏问题
【发布时间】:2011-05-31 20:20:48
【问题描述】:

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

我已经通过将我的整个 OOP 代码重写为非 OOP 来制定解决方案,这主要是数据库检查和插入,这似乎堵住了漏洞,但我很好奇是什么原因造成的?我正在使用 Zend Framework,一旦我删除了所有模型内容,就没有泄漏。

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

可能是我读过的那些引用函数吗?我以为那个错误已经修复了?!

编辑

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

【问题讨论】:

    标签: php zend-framework memory-leaks


    【解决方案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");
    

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

    您也可以使用xdebug 来跟踪您的应用程序。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 2016-07-28
      相关资源
      最近更新 更多