Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 特定于环境的内存泄漏_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php 特定于环境的内存泄漏

Php 特定于环境的内存泄漏,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我在使用Doctrine 2/Symfony的批处理脚本期间遇到内存泄漏问题 首先:我知道如何正确管理实体管理器以避免内存泄漏,出于某种原因,我的live server能够运行以下代码而不会遇到此问题。然而,在我的本地开发环境(PHP5.4.7)上,运行以下命令会导致内存使用膨胀 编辑: 是否有任何PHPINI、apache、osx、mysql验证可能导致此问题,因为我现在完全不知所措 请注意,这两个位置的代码都是相同的——因此造成这种差异的唯一原因是某种我不知道的日志记录(x-debug或SQ

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

首先:我知道如何正确管理实体管理器以避免内存泄漏,出于某种原因,我的live server能够运行以下代码而不会遇到此问题。然而,在我的本地开发环境(PHP5.4.7)上,运行以下命令会导致内存使用膨胀

编辑:

是否有任何PHPINI、apache、osx、mysql验证可能导致此问题,因为我现在完全不知所措

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

live server在本地运行PHP 5.4.6和5.4.7 live server正在本地运行centos 6,而不是OSX

我正在prod模式下运行以下命令,调试处于关闭状态

<?php

namespace Vendor\Bundle\MemoryTestBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

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]);
        }
    }
}
如下所述:

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


如果有帮助,请告诉我。链接页面上也很少有其他建议;您可能需要检查它们。

live server上的PHP版本是什么?live=5.4.6。。。。。。如果你说你在本地机器上使用OSX,我会首先假设这是PHP5.4中的一个bug。。但是看看5.4.7中的变更日志,它似乎没有得到解决(至少在bug修复中没有提到内存泄漏),在doctrine2 github页面上发布一个问题可能是一个很好的方法来实现这一点。我已经能够在同事系统上运行代码,并且没有泄漏(他运行的是5.3.10和另一个php.ini). 我有两种系统配置,所以我将使用试错法来确定是哪部分配置导致了问题。我还将在Linux中安装一个VM并在本地运行,以进行尝试。当/如果我发现更多信息,我将报告doctrine用户组。我在doctrine 1.x中使用sql server的PDO时遇到了类似的问题,原来是PHP5.3.6中的一个错误导致了PDO中的内存泄漏,可能是类似的问题导致了此问题。给出的链接是针对doctrine 1的。我没有在调试环境中运行。问题发生在我以生产模式(本地)运行时,而不会发生在我的同事以生产模式(本地)运行相同代码时。我确信这一定是因为php的编译方式(或我的本地配置)。我从来没有弄清楚这一点,所以我只是把我的内存限制设置为10Gb,暂时让它飞起来。
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...
all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:host=localhost;dbname=.......'
      username: .....
      password: .....
      profiler: false