特定于环境的内存泄漏



我在使用 Doctrine 2/Symfony 的批处理脚本期间遇到了内存泄漏问题。

首先:我知道如何正确管理实体管理器以避免内存泄漏,并且由于某种原因,我的实时服务器能够运行以下代码而不会遇到此问题。但是,在我的本地开发环境(PHP 5.4.7)上运行以下命令会导致我的内存使用激增。

编辑:

是否有任何可能导致此问题的 php ini、apache、osx、mysql 混淆,因为我现在完全不知所措。

请注意,两个位置的代码是相同的 - 因此导致这种差异的唯一原因是我不知道的某种日志记录(x-debug 或 SQL 的自动日志记录)。

实时服务器在本地运行 PHP 5.4.6 与 5.4.7实时服务器在本地运行 CentOS 6,而不是 OSX

我正在生产模式下运行以下命令,调试关闭...

<?php
namespace VendorBundleMemoryTestBundleCommand;
use SymfonyBundleFrameworkBundleCommandContainerAwareCommand;
use SymfonyComponentConsoleInputInputInterface;
use SymfonyComponentConsoleOutputOutputInterface;
class MemTestCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this
            ->setName('mem:test')
            ->setDescription('Shows memory use ballooning out of control');
    }
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $em = $this->getContainer()->get('doctrine.orm.entity_manager');
        $q = $em->createQuery('SELECT s FROM VendorMemoryTestBundle:SimpleEntity s');
        $iterableResult = $q->iterate();
        $i = 0;
        while (($row = $iterableResult->next()) !== false) {
            $i++;
            if ($i%50 == 0){
                echo sprintf('Memory usage: %01.0fKB.', memory_get_usage(true) / 1024) . PHP_EOL;
                $em->clear();
            }
            $em->detach($row[0]);
        }
    }
}

输出

Memory usage: 72192KB.
Memory usage: 72448KB.
Memory usage: 72448KB.
Memory usage: 72704KB.
Memory usage: 73216KB.
Memory usage: 73472KB.
Memory usage: 73472KB.
Memory usage: 73728KB.
Memory usage: 73728KB.
Memory usage: 73984KB.
Memory usage: 73984KB.
Memory usage: 74240KB.
etc...

如下所述:PHP/symfony/doctrine Memory Leak?

在调试环境中,Symfony记录所有查询。您必须手动设置选项"profiler:false"。

all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:host=localhost;dbname=.......'
      username: .....
      password: .....
      profiler: false

让我知道这是否有帮助。链接页面上也很少有其他建议;您可能需要检查它们。

相关内容

  • 没有找到相关文章

最新更新