dal:refresh:index + Elasticsearch resultiert mit: Allowed memory size exhausted

Moin,

ich habe einen frischen ES Server aufgesetzt und möchte ca 5.000 Produkte für ES indexieren. Nach ca. 5min bekomme ich diesen Fehler:

Der Server hat 800MB Speicher, die beim Indexieren sehr fix ausgeschöpft sind. Gibt es hier andere Möglichkeiten und wieso wird überhaupt so viel Speicher benötigt?

VG Aus Paderborn

Hallo,

800MB sind für ES viel zu knapp. 4-8GB sollten es schon sein, ggfs. mehr.

Auch auf die Heap Size solltest Du achten:
How To Configure Elasticsearch Heap Size to Change Max Memory Size | by Yusuf Kahveci | Trendyol Tech | Medium

Viele Grüße

Hi, danke für den Hinweis.

Der ES Server selbst is eine eigenständige VM und hat 4GB Ram, der Shop ist ein Shopware Hosting Paket von Mittwald, hat 800MB Ram. Ich denke der Ram auf dem Shop ist ausgeschöpft - was ich nicht verstehe, weil die Datensätze der Produkte selbst in Summe nicht an diesen Wert kommen. Und nachdem ein Datensatz verarbeitet und an ES gesendet wurde, kann dieser ja wieder aus dem Ram entfernt werden - also in der Theorie.

Also heißt das kurz gesagt das Elasticsearch auf einem Shopware Hosting Paket in der Regel garnicht nutzbar? 

Es gibt für dal:refresh:index auch einen --use-queue Parameter, könnte man damit vllt etwas erreichen?

VG

Hallo,

ah ok - lt. Deiner Fehlermeldung wird diese dann von Deinem Shopware Hosting Paket generiert, wo das PHP Memory Limit gesprengt wird. Falls der Server RAM swappen kann, könntest Du versuchen, das PHP Memory Limit z.B. auf 2048MB anzuheben, obwohl das Hosting Paket selbst nur 800MB RAM hat - ansonsten benötigst Du mehr RAM, um den OOM Fehler zu vermeiden. Den --use-queue Parameter kenne ich bisher nicht.

Grundsätzlich kannst Du ES auch auf dem gleichen System laufen lassen, wenn Du entsprechende Hardware Ressourcen hast (z.B. einen Dedi mit 32/64GB).

ES ist sehr speicherhungrig - über die Heap Size kannst Du das ein wenig eingrenzen (Configuring ElasticSearch to use less memory · GitHub) - durchaus möglich, dass auch der PHP Memory Bedarf runter geht, wenn Du die Heap Size runter drehst.

Viele Grüße

Hi,

ja richtig der ES Server wird über MS Azure verwaltet - der VM können jederzeit auch mehr Resourcen zur Verfügung gestellt werden.

Ich werde erstmal beim Hosting Partner anfragen ob das überhaupt möglich ist.

Hier im Forum habe ich ja auch schon von Szenarien gelesen, dass die Indexierung über mehrere Stunden gedauert hat, dort war aber nie die Rede von OOM. Ich hoffe ja nur dass die Indexierung bei mehr Arbeitspeicher nicht nach 5min Abbricht, sondern nach 15min - und trotzdem nichts erreicht.

Ohne Indexierung wird ES nicht mal teilweise nutzbar sein, denn dann bekomme ich bei nicht indexierten Produkten eine 404 Seite bzw ProduktNotFoundException :wink:

 

Hi,

grundsätzlich gibt es 2 Punkte - zum einen das PHP Memory Limit, welches Du in Deiner php.ini oder im Controlpanel einstellen kannst, insofern es sich um eine eigene Instanz und nicht um Shared Hosting handelt, bei welchen das PHP Memory Limit i.d.R. fest vorgegeben wird vom Hoster. 

Zum anderen kann (und sollte) selbst bei einem Server mit z.B. 64GB RAM das PHP Memory Limit gesetzt werden (nach der Devise nur soviel wie Deine PHP Skripte benötigen - mehr ist also nicht zwingend immer besser), damit ein Amok-laufender PHP Script nicht sämtliche Serverressourcen verwenden kann und der Server ggfs. instabil wird.

Falls möglich bei Deinem Hoster, das PHP Memory Limit mal auf 2048MB hochsetzen lassen (ggfs. nur möglich mit einem Paket-Upgrade).

Die Indexierung kann durchaus eine Weile dauern und die Seiten funktionieren auch erst dann, wenn diese vollständig abgeschlossen ist.

Frage ist natürlich, ob Du ES überhaupt benötigst - empfohlen wird ES eigentlich erst ab 50K-100K+ Artikel (war zumindest bei SW5 der Fall). Bei kleineren Instanzen kann ES sogar kontraproktiv sein und Bedarf auch regelmäßiger Pflege/Kontrolle.

Siehe auch der Hinweis unter Elasticsearch setup

" Note:  Elasticsearch integration should be considered an advanced Shopware feature. It requires the installation and configuration of Elasticsearch itself as well as technical personal to monitor and maintain the synchronization continuously. This might not be possible on all hosting plans or providers. Additionally, it will mostly benefit shops containing hundreds of thousands or millions of items. On smaller shops, its usage is not recommended, as you might not experience any visible benefits from it."

Viele Grüße

 

1 „Gefällt mir“

dal:refresh:index macht eig. nichts mit Elasticsearch. Das passiert eher mit es:index und dann der Queue

1 „Gefällt mir“

@SCOOPEX‍

Danke dir für die Erläuterung. Unser Kunde möchte ES haben, da die Suche Fehlertoleranter ist, als die herkömmliche Suche. Ich sehe aktuell auch keine anderen Vorteile. Aber sollte sich ES nicht als vorteilhaft erweisen, kann man es auch einfach wieder abstellen.

@Shyim‍

Laut der Doku: Home | Shopware Documentation gibt es kein Hinweis auf den Befehl es:index.

This now also includes the Elasticsearch index

Ist damit der es:index Befehl gemeint? Ich werde das mal ausprobieren, vllt ist das ja Resourcenfreundlicher als die komplette Indexierung inkl SEO Urls usw.

Mit dem Befehl es:index passiert nichts, es werden jedenfalls keine indicies auf dem ES Server angelegt. Bleibt also nur dal:refresh:index mit massig viel Arbeitsspeicher zu testen. 

Gibt es sonst noch weitere Lösungsansätze?

dal:refrsh:index kann man soweit nicht in kleinere Parts unterteilen oder?

[2021-01-18 01:36:47] request.ERROR: Uncaught PHP Exception Shopware\Core\Content\Product\Exception\ProductNotFoundException: "Product for id 917b930332294bf080c1f2477b793fb5 not found." at /html/shopware/vendor/shopware/core/Content/Product/SalesChannel/Detail/ProductDetailRoute.php line 98 {"exception":"[object] (Shopware\\Core\\Content\\Product\\Exception\\ProductNotFoundException(code: 0): Product for id 917b930332294bf080c1f2477b793fb5 not found. at /html/shopware/vendor/shopware/core/Content/Product/SalesChannel/Detail/ProductDetailRoute.php:98)"} []

Kann mir denn hierzu jemand etwas sagen? Sobald ES aktiv ist kommt dieser Fehler. Das Produkt existiert definitiv und ist auch dem SalesChannel zugewiesen. Schalte ich ES ab, dann kann ich die Produkt-Detailseite wieder aufrufen.

Gestern noch konnte ich die Produkte mit ES aktiv allesamt aufrufen und die Indexierung scheint auch funktioniert zu haben, heute hat sich der „Health Status“ von green auf yellow geändet und es wird ein neuer index aufgebaut, seitdem ließen sich auch nicht mehr die Produkte im Storefront aufrufen.

Diese Methode sorgt dafür, dass ich die Produkt Detail Seite in Verbindung mit ES nicht aufrufen kann. Wieso weiß ich leider nicht :wink:

Mach mal

./bin/console es:index

./bin/console messenger:consume (Am besten Parallel)

Dann sollte die Suche klappen.

Wenn du dich mit Elasticsearch noch nie befasst hast und keine jeweilige Lizens bei uns hast für Support: Solltest du das nicht verwenden. Es ist kein einfaches Thema und man sollte sich vorher reinfuchsen und verstehen was dort passiert :slight_smile: