Я столкнулся с проблемой памяти. Я создал обработчик для моих очередей. И после того, как в консоли было выполнено 309 сообщений, я столкнулся с Allowed memory size
. Я использовал для очереди Symfony Messenger
. В обработчике я создаю один объект Product с несколькими объектами реализаций Brand, Shop и Categories, в котором сохраняются объекты ManyToMany и ManyToOne с каскадным сохранением. Без создания отношений сущностей все работает, 2037 год был создан, без исключений. Может быть, какая-то проблема с моим отношением. Потому что, когда я удаляю в addShopRelation
и addCategoryRelation
functins addProduct
для каждой сущности, потребитель выполнил все сообщения из очереди без ошибок. Но в таблицах category_product
и shop_product
ничего не создано. Как это может работать corerct, созданный объект с отношением ManyToMany в одном сообщении из очереди?
Product Entity
class Product implements EntityValidatorException
{
use TimestampableEntity;
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Annotation\Groups({Product::SERIALIZED_GROUP_LIST})
*/
private $id;
/**
* @var Collection|Category[]
* @ORM\ManyToMany(targetEntity="Category", mappedBy="products", cascade={"persist"})
* @Annotation\Groups({Product::SERIALIZED_GROUP_LIST})
*/
private $categoryRelation;
/**
* @var Brand
*
* @ORM\ManyToOne(targetEntity="Brand", inversedBy="products", cascade={"persist"})
* @Annotation\Groups({Product::SERIALIZED_GROUP_LIST})
*/
private $brandRelation;
/**
* @var Collection|Shop[]
* @ORM\ManyToMany(targetEntity="Shop", mappedBy="products", cascade={"persist"})
* @Annotation\Groups({Product::SERIALIZED_GROUP_LIST})
*/
private $shopRelation;
public function addShopRelation(Shop $shopRelation): self
{
if (!$this->getShopRelation()->contains($shopRelation)) {
$this->shopRelation[] = $shopRelation;
$shopRelation->addProduct($this);
}
return $this;
}
public function addCategoryRelation(Category $categoryRelation): self
{
if (!$this->getCategoryRelation()->contains($categoryRelation)) {
$this->categoryRelation[] = $categoryRelation;
$categoryRelation->addProduct($this);
}
return $this;
}
public function setBrandRelation(?Brand $brandRelation): self
{
$this->brandRelation = $brandRelation;
return $this;
}
и в моем обработчике после создания сущности Product я создаю сущности отношений и
Я использую
"name": "symfony/orm-pack",
"version": "v1.0.8",
и
"name": "symfony/framework-bundle",
"version": "v5.0.5",
мой messenger.yaml, я использовал все промежуточное ПО для doctrine, ping, закрытие соединения и одну транзакцию, может быть, что-то будет для менеджера сущностей из сущностей, как em->clear()
? Но если я исправлю исследование, подписчик на событие doctrine.orm.messenger.event_subscriber.doctrine_clear_entity_manager
. Этот подписчик регистрируется автоматически, поэтому вам не нужно ничего добавлять. Но ..
messenger:
serializer:
default_serializer: messenger.transport.symfony_serializer
symfony_serializer:
format: json
context: { }
buses:
messenger.bus.default:
middleware:
- doctrine_ping_connection
- doctrine_close_connection
- doctrine_transaction
# my custom middleware without some logic, just for test
- reply_middleware
failure_transport: failed
transports:
success:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
options:
exchange:
type: direct
name: productrow
default_publish_routing_key: normal
queues:
messages_normal:
binding_keys: [normal]
andraction_parse_row_success:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
options:
exchange:
type: direct
name: andraction_parse_row
default_publish_routing_key: parse_row
queues:
andraction_parse_row:
binding_keys: [parse_row]
failed: 'doctrine://default?queue_name=failed'
routing:
'App\QueueModel\FileReadyDownloaded': success
'App\QueueModel\AdtractionDataRow': andraction_parse_row_success
трассировка стека
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes) in /var/www/symfony/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php on line 128
PHP Stack trace:
PHP 1. {main}() /var/www/symfony/bin/console:0
PHP 2. Symfony\Bundle\FrameworkBundle\Console\Application->run() /var/www/symfony/bin/console:42
PHP 3. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() /var/www/symfony/vendor/symfony/console/Application.php:140
PHP 4. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() /var/www/symfony/vendor/symfony/framework-bundle/Console/Application.php:83
PHP 5. Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() /var/www/symfony/vendor/symfony/console/Application.php:264
PHP 6. Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() /var/www/symfony/vendor/symfony/framework-bundle/Console/Application.php:97
PHP 7. Symfony\Component\Messenger\Command\ConsumeMessagesCommand->run() /var/www/symfony/vendor/symfony/console/Application.php:930
PHP 8. Symfony\Component\Messenger\Command\ConsumeMessagesCommand->execute() /var/www/symfony/vendor/symfony/console/Command/Command.php:255
PHP 9. Symfony\Component\Messenger\Worker->run() /var/www/symfony/vendor/symfony/messenger/Command/ConsumeMessagesCommand.php:186
PHP 10. Symfony\Component\Messenger\Worker->handleMessage() /var/www/symfony/vendor/symfony/messenger/Worker.php:81
PHP 11. Symfony\Component\Messenger\RoutableMessageBus->dispatch() /var/www/symfony/vendor/symfony/messenger/Worker.php:117
PHP 12. Symfony\Component\Messenger\TraceableMessageBus->dispatch() /var/www/symfony/vendor/symfony/messenger/RoutableMessageBus.php:54
PHP 13. Symfony\Component\Messenger\MessageBus->dispatch() /var/www/symfony/vendor/symfony/messenger/TraceableMessageBus.php:41
PHP 14. Symfony\Component\Messenger\Middleware\TraceableMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/MessageBus.php:80
PHP 15. Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/TraceableMiddleware.php:43
PHP 16. Symfony\Component\Messenger\Middleware\RejectRedeliveredMessageMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/AddBusNameStampMiddleware.php:37
PHP 17. Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/RejectRedeliveredMessageMiddleware.php:42
PHP 18. Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/DispatchAfterCurrentBusMiddleware.php:67
PHP 19. Symfony\Bridge\Doctrine\Messenger\DoctrinePingConnectionMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/FailedMessageProcessingMiddleware.php:34
PHP 20. Symfony\Bridge\Doctrine\Messenger\DoctrinePingConnectionMiddleware->handleForManager() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/AbstractDoctrineMiddleware.php:45
PHP 21. Symfony\Bridge\Doctrine\Messenger\DoctrineCloseConnectionMiddleware->handle() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/DoctrinePingConnectionMiddleware.php:32
PHP 22. Symfony\Bridge\Doctrine\Messenger\DoctrineCloseConnectionMiddleware->handleForManager() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/AbstractDoctrineMiddleware.php:45
PHP 23. Symfony\Bridge\Doctrine\Messenger\DoctrineTransactionMiddleware->handle() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/DoctrineCloseConnectionMiddleware.php:31
PHP 24. Symfony\Bridge\Doctrine\Messenger\DoctrineTransactionMiddleware->handleForManager() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/AbstractDoctrineMiddleware.php:45
PHP 25. App\Middleware\ReplyMiddleware->handle() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/DoctrineTransactionMiddleware.php:31
PHP 26. Symfony\Component\Messenger\Middleware\SendMessageMiddleware->handle() /var/www/symfony/src/Middleware/ReplyMiddleware.php:17
PHP 27. Symfony\Component\Messenger\Middleware\HandleMessageMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/SendMessageMiddleware.php:79
PHP 28. App\QueueModelHandlers\AdtractionDataRowHandler->__invoke() /var/www/symfony/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php:63
PHP 29. ContainerJvWF4xj\ShopService_7b646fc->createShopFromProduct() /var/www/symfony/src/QueueModelHandlers/AdtractionDataRowHandler.php:77
PHP 30. App\Services\Models\ShopService->createShopFromProduct() /var/www/symfony/var/cache/dev/ContainerJvWF4xj/App_KernelDevDebugContainer.php:9101
PHP 31. App\Entity\Product->addShopRelation() /var/www/symfony/src/Services/Models/ShopService.php:43
PHP 32. App\Entity\Shop->addProduct() /var/www/symfony/src/Entity/Product.php:680
PHP 33. Doctrine\ORM\PersistentCollection->contains() /var/www/symfony/src/Entity/Shop.php:85
PHP 34. Doctrine\ORM\PersistentCollection->contains() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/PersistentCollection.php:414
PHP 35. Doctrine\ORM\PersistentCollection->initialize() /var/www/symfony/vendor/doctrine/collections/lib/Doctrine/Common/Collections/AbstractLazyCollection.php:61
PHP 36. Doctrine\ORM\PersistentCollection->doInitialize() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/PersistentCollection.php:213
PHP 37. Doctrine\ORM\UnitOfWork->loadCollection() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/PersistentCollection.php:694
PHP 38. Doctrine\ORM\Persisters\Entity\BasicEntityPersister->loadManyToManyCollection() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:2936
PHP 39. Doctrine\ORM\Persisters\Entity\BasicEntityPersister->loadCollectionFromStatement() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php:962
PHP 40. Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateAll() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php:952
PHP 41. Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateAllData() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php:153
PHP 42. Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateRowData() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php:162
PHP 43. Doctrine\ORM\Internal\Hydration\ObjectHydrator->getEntity() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php:492
PHP 44. Doctrine\ORM\UnitOfWork->createEntity() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php:271
PHP 45. Doctrine\ORM\Proxy\ProxyFactory->getProxy() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:2806
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32768 bytes) in /var/www/symfony/vendor/symfony/error-handler/Error/OutOfMemoryError.php on line 1
PHP Stack trace:
PHP 1. {main}() /var/www/symfony/bin/console:0
PHP 2. Symfony\Bundle\FrameworkBundle\Console\Application->run() /var/www/symfony/bin/console:42
PHP 3. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() /var/www/symfony/vendor/symfony/console/Application.php:140
PHP 4. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() /var/www/symfony/vendor/symfony/framework-bundle/Console/Application.php:83
PHP 5. Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() /var/www/symfony/vendor/symfony/console/Application.php:264
PHP 6. Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() /var/www/symfony/vendor/symfony/framework-bundle/Console/Application.php:97
PHP 7. Symfony\Component\Messenger\Command\ConsumeMessagesCommand->run() /var/www/symfony/vendor/symfony/console/Application.php:930
PHP 8. Symfony\Component\Messenger\Command\ConsumeMessagesCommand->execute() /var/www/symfony/vendor/symfony/console/Command/Command.php:255
PHP 9. Symfony\Component\Messenger\Worker->run() /var/www/symfony/vendor/symfony/messenger/Command/ConsumeMessagesCommand.php:186
PHP 10. Symfony\Component\Messenger\Worker->handleMessage() /var/www/symfony/vendor/symfony/messenger/Worker.php:81
PHP 11. Symfony\Component\Messenger\RoutableMessageBus->dispatch() /var/www/symfony/vendor/symfony/messenger/Worker.php:117
PHP 12. Symfony\Component\Messenger\TraceableMessageBus->dispatch() /var/www/symfony/vendor/symfony/messenger/RoutableMessageBus.php:54
PHP 13. Symfony\Component\Messenger\MessageBus->dispatch() /var/www/symfony/vendor/symfony/messenger/TraceableMessageBus.php:41
PHP 14. Symfony\Component\Messenger\Middleware\TraceableMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/MessageBus.php:80
PHP 15. Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/TraceableMiddleware.php:43
PHP 16. Symfony\Component\Messenger\Middleware\RejectRedeliveredMessageMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/AddBusNameStampMiddleware.php:37
PHP 17. Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/RejectRedeliveredMessageMiddleware.php:42
PHP 18. Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/DispatchAfterCurrentBusMiddleware.php:67
PHP 19. Symfony\Bridge\Doctrine\Messenger\DoctrinePingConnectionMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/FailedMessageProcessingMiddleware.php:34
PHP 20. Symfony\Bridge\Doctrine\Messenger\DoctrinePingConnectionMiddleware->handleForManager() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/AbstractDoctrineMiddleware.php:45
PHP 21. Symfony\Bridge\Doctrine\Messenger\DoctrineCloseConnectionMiddleware->handle() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/DoctrinePingConnectionMiddleware.php:32
PHP 22. Symfony\Bridge\Doctrine\Messenger\DoctrineCloseConnectionMiddleware->handleForManager() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/AbstractDoctrineMiddleware.php:45
PHP 23. Symfony\Bridge\Doctrine\Messenger\DoctrineTransactionMiddleware->handle() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/DoctrineCloseConnectionMiddleware.php:31
PHP 24. Symfony\Bridge\Doctrine\Messenger\DoctrineTransactionMiddleware->handleForManager() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/AbstractDoctrineMiddleware.php:45
PHP 25. App\Middleware\ReplyMiddleware->handle() /var/www/symfony/vendor/symfony/doctrine-bridge/Messenger/DoctrineTransactionMiddleware.php:31
PHP 26. Symfony\Component\Messenger\Middleware\SendMessageMiddleware->handle() /var/www/symfony/src/Middleware/ReplyMiddleware.php:17
PHP 27. Symfony\Component\Messenger\Middleware\HandleMessageMiddleware->handle() /var/www/symfony/vendor/symfony/messenger/Middleware/SendMessageMiddleware.php:79
PHP 28. App\QueueModelHandlers\AdtractionDataRowHandler->__invoke() /var/www/symfony/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php:63
PHP 29. ContainerJvWF4xj\ShopService_7b646fc->createShopFromProduct() /var/www/symfony/src/QueueModelHandlers/AdtractionDataRowHandler.php:77
PHP 30. App\Services\Models\ShopService->createShopFromProduct() /var/www/symfony/var/cache/dev/ContainerJvWF4xj/App_KernelDevDebugContainer.php:9101
PHP 31. App\Entity\Product->addShopRelation() /var/www/symfony/src/Services/Models/ShopService.php:43
PHP 32. App\Entity\Shop->addProduct() /var/www/symfony/src/Entity/Product.php:680
PHP 33. Doctrine\ORM\PersistentCollection->contains() /var/www/symfony/src/Entity/Shop.php:85
PHP 34. Doctrine\ORM\PersistentCollection->contains() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/PersistentCollection.php:414
PHP 35. Doctrine\ORM\PersistentCollection->initialize() /var/www/symfony/vendor/doctrine/collections/lib/Doctrine/Common/Collections/AbstractLazyCollection.php:61
PHP 36. Doctrine\ORM\PersistentCollection->doInitialize() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/PersistentCollection.php:213
PHP 37. Doctrine\ORM\UnitOfWork->loadCollection() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/PersistentCollection.php:694
PHP 38. Doctrine\ORM\Persisters\Entity\BasicEntityPersister->loadManyToManyCollection() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:2936
PHP 39. Doctrine\ORM\Persisters\Entity\BasicEntityPersister->loadCollectionFromStatement() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php:962
PHP 40. Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateAll() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php:952
PHP 41. Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateAllData() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php:153
PHP 42. Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateRowData() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php:162
PHP 43. Doctrine\ORM\Internal\Hydration\ObjectHydrator->getEntity() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php:492
PHP 44. Doctrine\ORM\UnitOfWork->createEntity() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php:271
PHP 45. Doctrine\ORM\Proxy\ProxyFactory->getProxy() /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:2806
PHP 46. Symfony\Component\ErrorHandler\ErrorHandler::handleFatalError() /var/www/symfony/vendor/symfony/error-handler/ErrorHandler.php:0
PHP 47. spl_autoload_call() /var/www/symfony/vendor/symfony/error-handler/ErrorHandler.php:676
PHP 48. Symfony\Component\ErrorHandler\DebugClassLoader->loadClass() /var/www/symfony/vendor/symfony/error-handler/ErrorHandler.php:676
/var/www/symfony #