Nachdem ein Import-Script eines Kunden mit Out Of Memory (4GB Limit) stets nach ungefähr 1200 Iterationen abbricht, habe ich mal versucht das Problem zu lokalisieren.
Das Problem liegt im Symfony EventDispatcher, der bei jeder Iteration 2MB mehr Memory konsumiert.
Das macht er aber nur beim Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenContainerEvent. Bei anderen Events liegt der dauerhafte Memory-Konsum bei durchschnittlich 0,1 MB.
Hat jemand gleiche Probleme (gewiss, ggf. unwissend) oder hat sich diesem Thema schon einmal angenommen?
Das erklärt natürlich auch, wieso Importe generell Ewigkeiten dauern bzw. abbricht.
Ich habe mir die Listener im Detail angesehen…
Registered Listeners Grouped by Event
=====================================
"Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenContainerEvent" event
--------------------------------------------------------------------------------------
------- ------------------------------------------------------------------------------------------------------ ----------
Order Callable Priority
------- ------------------------------------------------------------------------------------------------------ ----------
#1 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateSalutationRoute() 2016
#2 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateCountryRoute() 2015
#3 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateStreamIds() 2014
#4 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateStreamsBeforeIndexing() 2013
#5 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateSnippets() 2012
#6 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateShippingMethodRoute() 2011
#7 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateContext() 2010
#8 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateCrossSellingRoute() 2009
#9 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidatePropertyFilters() 2008
#10 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateManufacturerFilters() 2007
#11 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateProductAssignment() 2006
#12 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidatePaymentMethodRoute() 2005
#13 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateNavigationRoute() 2004
#14 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateLanguageRoute() 2003
#15 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateCurrencyRoute() 2002
#16 Shopware\Core\Framework\Adapter\Cache\CacheInvalidationSubscriber::invalidateCmsPageIds() 2001
#17 Shopware\Storefront\Framework\Routing\CachedDomainLoaderInvalidator::invalidate() 2000
#18 Shopware\Core\Framework\DataAbstractionLayer\Indexing\EntityIndexerRegistry::refresh() 1000
#19 Shopware\Storefront\Framework\Seo\SeoUrlRoute\SeoUrlUpdateListener::detectSalesChannelEntryPoints() 0
#20 Shopware\Elasticsearch\Product\CustomFieldUpdater::onNewCustomFieldCreated() 0
------- ------------------------------------------------------------------------------------------------------ ----------
Irgendeiner dieser Subscriber (oder includierte Scripts) konsumiert pro Iteration knapp 2 MB Speicher.
Ich habe gesehen, dass für 6.5.0.0 teile des Codes umgeschrieben wurden. Ich bin mir aber nicht sicher in wie weit es dieses durchaus ernsthafte Problem adressiert.
Könnt ihr dazu etwas sagen? @marco.steinhaeuser
Puh, da fühle ich mich noch immer etwas nackt
Schau mal, nach dem letzten Oktober ist hier vor vier Tagen etwas passiert, meinst Du diese Änderung? History for src/Core/Framework/DataAbstractionLayer/Event/EntityWrittenContainerEvent.php - shopware/platform · GitHub
Im Commit sehe ich im Wesentlichen nur zwei neue public functions: NEXT-20119 - Add product.written event when association deleted · shopware/platform@6479d7a · GitHub
Pack das doch ansonsten gern mal mit in den Issue-Tracker. Ich könnte mir vorstellen, das solche konkreten Hinweise sehr dankbar aufgenommen werden.