我在使用Doctrine 2 / Symfony的批处理脚本中遇到了内存泄漏问题。
首先:我知道如何正确管理实体管理器以避免内存泄漏,并且由于某种原因,我的实时服务器能够运行以下代码而不会遇到此问题。但是在我的本地开发环境(PHP 5.4.7)上运行以下命令会导致我的内存使用气球。
编辑:
是否有任何php ini,apache,osx,mysql确认可能导致此问题,因为我现在完全失去了。
请注意,两个位置的代码都是相同的 - 因此导致这种差异的唯一方法是我不知道的某种日志记录(x-debug或自动记录SQL)。
实时服务器在本地运行PHP 5.4.6和5.4.7 实时服务器运行centos 6,vs 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]);
}
}
}
输出
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...
答案 0 :(得分:0)
如下所述: php/symfony/doctrine memory leak?
在调试环境中,Symfony会记录所有查询。您必须手动设置选项“profiler:false。”
all:
doctrine:
class: sfDoctrineDatabase
param:
dsn: 'mysql:host=localhost;dbname=.......'
username: .....
password: .....
profiler: false
如果有帮助,请告诉我。链接页面上的其他建议也很少;你可能想检查它们。