WebTestCase或Symfony2-Kernel中的内存泄漏 - 如何向专家报告?

时间:2012-05-06 20:39:59

标签: memory-leaks symfony

我认为我在WebTestCase类或内核本身中发现了内存泄漏。我最后的问题。

为了重现,我创建了一个新的空WebTestCase,它可以执行$ max断言(在我的测试中,$ max范围从1到100.000),而无需实例化任何内核。

<?php
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class DemoTest extends WebTestCase
{
    public function testHello(  )
    {
        $max = 100000;
        for( $i = 0; $i < 1; $i++ )
        {
            $this->assertTrue( true );
        }
    }
}

$ max = 1

Time: 0 seconds, Memory: 5.75Mb
OK (1 test, 1 assertion)

$ max = 100000

Time: 1 second, Memory: 5.75Mb
OK (1 test, 100000 assertions)

正如预期的那样,无论是运行1次还是100.000次,我都消耗相同的内存。

现在我尝试循环创建任意类,使用它并销毁它。我选择DOMDocument的方式与我选择任何其他类的方式相同。

    public function testHello(  )
    {
        $max = 100000;
        for( $i = 0; $i < $max; $i++ )
        {
            $dummy = new \DOMDocument();
            $dummy->loadHTML( '<html><head><title>dummy</title></head><body>dummy</body></html>' );
            unset( $dummy );
            $this->assertTrue( true );
        }
    }

$ max = 1

Time: 0 seconds, Memory: 5.75Mb
OK (1 test, 1 assertion)

$ max = 100000

Time: 2 seconds, Memory: 5.75Mb
OK (1 test, 100000 assertions)

同样,无论我执行1次还是100.000,我都会使用相同的内存。

但是......现在我在循环中创建并销毁内核。我没有做 - &gt; boot()和 - &gt; shutdown(),只是获取新的内核对象,这些对象甚至没有被引导,然后是未引用的,因此它们应该可以释放所有资源。

    public function testHello(  )
    {
        $max = 10000;
        for( $i = 0; $i < $max; $i++ )
        {
            $dummy = static::createKernel();
            unset( $dummy );
            $this->assertTrue( true );
        }
    }

$ max = 1

Time: 0 seconds, Memory: 6.25Mb
OK (1 test, 1 assertion)

$ max = 100000

Time: 9 seconds, Memory: 165.50Mb
OK (1 test, 100000 assertions)

从5.75升至6.25是合乎逻辑的,它可能是内核资源的大小。半兆。但是不正确的是,通过创建100.000内核而不对它们进行任何操作,我们倾向于消耗165兆兆。有人正在解放它所分配的资源。

我的问题:

  • 这是泄漏吗?或者这是预期的行为,对于任何特殊原因,我不知道为什么它应该如此工作?
  • 我使用2.0.10。如果是泄漏,我怎么知道这是否在以后的版本中得到纠正?
  • 如果没有更正,这是向核心团队报告的最简单方法吗?

谢谢! 哈维。

1 个答案:

答案 0 :(得分:2)

Symfony2代码托管在github.com上,必须在此网站上声明问题https://github.com/symfony/symfony/issues

我在重型网络测试用例中也遇到过这种问题,并且在2.0.x版本中没有修复。我不能确保你是内存泄漏或正常行为...

我建议你使用Google网上论坛邮件列表,然后是GitHub问题。