Skip to content

[FrameworkBundle] Memory leak in 4.4.41 #46416

Closed
@pmishev

Description

@pmishev

Symfony version(s) affected

4.4.41

Description

Upgrading from 4.4.40 to 4.4.41 introduces a memory leak.

How to reproduce

Have a Command with:

<?php

namespace App\Command;

use App\Entity\Product;
use Doctrine\ORM\AbstractQuery;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class TestCommand extends Command
{
    protected static $defaultName = 'app:test';

    private EntityManagerInterface $em;

    public function __construct(EntityManagerInterface $em)
    {
        parent::__construct();

        $this->em = $em;
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $repo = $this->em->getRepository(Product::class);
        $qb = $repo->createQueryBuilder('t')->orderBy('t.id', 'ASC');

        $batchSize = 5000;
        $offset = 0;
        $qb->setMaxResults($batchSize);
        do {
            $qb->setFirstResult($offset);
            $records = $qb->getQuery()->getResult(AbstractQuery::HYDRATE_ARRAY);
            foreach ($records as $record) {
                $qb1 = $repo->createQueryBuilder('t')->where('t.id = :id')->setParameter('id', $record['id']);
                $qb1->getQuery()->getSingleResult(Query::HYDRATE_ARRAY);
            }
            dump(sprintf('Memory used: %u MB', memory_get_usage(true) / 1048576));
            $offset += $batchSize;
        } while (!empty($records));

        return 0;
    }
}

Run it:

bin/console app:test --no-debug

Output with "symfony/framework-bundle": "4.4.40":

^ "Memory used: 40 MB"
^ "Memory used: 56 MB"
^ "Memory used: 56 MB"
^ "Memory used: 56 MB"
^ "Memory used: 56 MB"
^ "Memory used: 56 MB"
^ "Memory used: 56 MB"
^ "Memory used: 58 MB"
^ "Memory used: 56 MB"
^ "Memory used: 58 MB"
^ "Memory used: 56 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"
^ "Memory used: 60 MB"
^ "Memory used: 58 MB"
^ "Memory used: 58 MB"

Output with "symfony/framework-bundle": "4.4.41":

^ "Memory used: 42 MB"
^ "Memory used: 56 MB"
^ "Memory used: 60 MB"
^ "Memory used: 62 MB"
^ "Memory used: 66 MB"
^ "Memory used: 70 MB"
^ "Memory used: 74 MB"
^ "Memory used: 76 MB"
^ "Memory used: 78 MB"
^ "Memory used: 82 MB"
^ "Memory used: 86 MB"
^ "Memory used: 88 MB"
^ "Memory used: 92 MB"
^ "Memory used: 96 MB"
^ "Memory used: 100 MB"
^ "Memory used: 102 MB"
^ "Memory used: 106 MB"
^ "Memory used: 108 MB"
^ "Memory used: 112 MB"
^ "Memory used: 114 MB"
^ "Memory used: 118 MB"
^ "Memory used: 120 MB"
^ "Memory used: 124 MB"
^ "Memory used: 126 MB"
^ "Memory used: 128 MB"
^ "Memory used: 128 MB"

Possible Solution

No response

Additional Context

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions