Was ist der Zweck der Erstellung von LockedLoadData / nicht zwischengespeicherten Seiten?

11

Ich denke, seit dem Update auf Magento 2.3.1 habe ich Probleme mit nicht zwischengespeicherten Seitenladevorgängen (während der Entwicklung).

Ich habe eine blackfire.io-Spur erstellt und es stellt sich heraus, dass hier 42 Sekunden im Schlaf verbracht werden .

Jetzt frage ich mich, was der Zweck davon ist. Ich schätze, ich laufe in einer Art Rennzustand?

Hat jemand so etwas schon einmal erlebt?

EDIT: Der Call Stack scheint Commercebug zu beinhalten.

Alex
quelle

Antworten:

8

Nun, das ist eine Wahl? - die Magento-Ingenieure gemacht.

Dies ist keine Antwort, aber es sieht so aus, als würde diese Funktion einen Rückruf akzeptieren, mit dem zwischengespeicherte Daten geladen werden sollen. Der Rückruf prüft, ob derzeit eine Sperre vorhanden ist. Wenn nicht, wird eine Sperre eingerichtet, die Daten werden geladen und die Sperre wird aufgehoben. Wenn es ein Block an seinem Platz ist, es schläft für 100,000Mikrosekunden (0,1 Sekunden) und ruft dann wieder den Lader.

Wenn ich also laut nachdenke, würde ich raten

  1. Möglicherweise eine mehr als normale Anzahl von Anfragen an diese Funktion
  2. Höhere als normale Lesezeiten aus Ihrem Cache.
Alan Storm
quelle
7

Der LockedLoadData-Mechanismus muss die Belastung des Servers verringern.

Bisher haben alle Clients beim Bereinigen des Konfigurationscaches auf hochgeladenen Sites dieselben Informationen generiert, die die CPU- / Io-Last erheblich erhöhen.

Mit LockedLoadData generiert nur ein Client einen Cache und andere warten darauf.

Weitere Details zur Funktionsweise.

Der erste Funktionsaufruf "Daten abrufen" ruft zurück und wenn er die Daten abruft, gibt er sie einfach zurück (wenn sich also Daten im Cache befinden, funktioniert der Code wie zuvor und verwendet keine Sperren).

Wenn keine Daten verfügbar sind und die Sperre gesperrt ist, versuchen wir in der Schleife, Daten zu laden, bis Daten abgerufen werden oder die Sperre aufgehoben wurde.

Wenn es keine Sperre gibt, erstellen wir eine Sperre und generieren Daten, speichern sie im Cache und entfernen die Sperre und geben Daten zurück

PS: Wir haben diese Änderungen wie einen Patch für einen der Clients mit einer Last von bis zu 20 kRPM gesendet und sie funktionieren mindestens 3 Monate ohne Probleme. Also vielleicht das Problem in Ihren Anpassungen / Modulen (zum Beispiel, wenn sie den Cache-Mechanismus kaputt gemacht haben)

KAndy
quelle
Interessant ... Jedenfalls läuft es in meinem Fall verrückt. Ich debugge dies mit Alan, PulseStorm
Alex
scheint eine wirklich schlechte Lösung zu sein, bedeutet, dass alle wartenden Benutzer ihren Prozess am Leben erhalten. Warum können sie nicht einfach Tabellensperren verwenden
OZZIE
@OZZIE bevorzugen Sie, dass alle Benutzer Daten generieren, anstatt zu schlafen, bis einer fertig ist? Wir haben nicht so mathematikfreie CPU-Ressourcen
KAndy