Ich habe dies auch auf New Relic ziemlich oft gesehen.
Nach dem, was ich gesehen habe, gibt es ein paar verschiedene Ursachen, ich habe kein vollständiges Verständnis für dieses Problem, aber es ist etwas, worüber ich in letzter Zeit nachgedacht habe. Hier sind meine Ergebnisse.
Sitzungen in Magento, Locking und New Relic
Jede Controller-Aktion in Magento verwendet die Sitzung, egal ob sie benötigt wird oder nicht. Die Sitzung wird eifrig in Mage_Core_Controller_Varien_Action :: preDispatch instanziiert
Wenn Sie die Sitzungssperre aktiviert haben, bedeutet dies, dass Ihre Sitzung für die Dauer der Anforderung gesperrt ist, bis die Anforderung abgeschlossen ist. Ich habe noch keinen Code gefunden, der die Sitzungssperre aufhebt, aber ich bin mir ziemlich sicher, dass er irgendwo drin ist.
Letztendlich bedeutet dies, dass Sie, wenn Sie mehrere gleichzeitige Anforderungen an Magento-Controller-Aktionen von einem Ort aus unter Verwendung derselben Sitzung auslösen, darauf warten müssen, dass einige dieser Anforderungen abgeschlossen und die Sitzung entsperrt werden, um fortzufahren. Normalerweise sehe ich dies als langsame Transaktion auf einem neuen Relikt, das Mage_Core_Model_Session_Abstract_Varien::start
für ~ 30 Sekunden feststeckt (ich glaube, mein Wartezeitlimit für die Sitzungssperre).
Dieser Bericht über New Relic hat meines Erachtens mehrere Nachteile
- Verlangsamt die durchschnittliche Gesamtantwortzeit, da diese Anforderungen langsamer sind, als sie es sonst hätten sein sollen.
- New Relic zeichnet eine Stichprobe der langsamsten Transaktionen auf, wenn ich Leistungsengpässe habe, die beispielsweise 20 Sekunden dauern. New Relic meldet diese nicht automatisch für mich, wenn dieselbe URL von Sitzungssperrzeitlimits geplagt wird. Die Zeitüberschreitungen verbergen die nützlichen Daten.
Ursachen
Ich habe ein paar häufige Ursachen dafür gesehen, keineswegs eine endgültige Liste
Bots
Crawler wie Baidu und Yandex sind etwas unhöflich und rammen die Website. Sie werden von einem Ort ausgeführt, der zahlreiche Anforderungen auslöst, dieselbe Sitzung verwendet und den Mechanismus zur Sitzungssperrung auslöst, wodurch langsame Transaktionen in New Relic angezeigt werden.
Ajax ruft Magento-Controller-Aktionen auf
Bei lackierten Websites müssen kundenspezifische Daten mit Sorgfalt geladen werden. Einige Websites verwalten dies mithilfe von Ajax-Aufrufen an das Magento-Backend, um die erforderlichen Daten abzurufen. Ich habe auch einige Websites gesehen, auf denen Ajax-Aufrufe im Backend verwendet wurden, um produktspezifische Informationen abzurufen, z. B. die Menge, die beim Verkauf eines Artikels noch verfügbar ist.
Wenn eine einzelne Seite beim Laden der Seite mehrere Ajax-Aufrufe an das Back-End auslöst, kann dies möglicherweise den Sitzungssperrmechanismus auslösen. Je mehr Ajax auf das Magento-Backend zurückruft, desto wahrscheinlicher ist es, dass Sperren auftreten.
Lack ESI
Das selbe wie oben, nur dass anstelle von Ajax-Aufrufen Edge-Side-Includes verwendet werden, die neue Aufrufe an das Backend zu sein scheinen.
Mein Plan
Ich habe dies noch nicht getan, es ist also immer noch rein theoretisch, aber es ist etwas, worüber ich in den nächsten Monaten nachdenken werde.
Ich habe dieses Problem während der Mage Titans UK-Konferenz 2016 angesprochen und Fabrizio Branca hat mich auf das folgende Modul hingewiesen: https://github.com/AOEpeople/Aoe_BlackHoleSession .
Basierend auf einem regulären Ausdruck verhindert das Modul, dass Bots echte Sitzungen erstellen. Dies sollte den Vorteil haben, dass keine Sitzungssperre aktiviert wird und Ihre Sitzungsressourcen nicht von unhöflichen Bots missbraucht werden. Bots sollten Ihre New Relic-Messwerte nicht mehr verschmutzen.
Damit Ajax / ESI-Aufrufe Kundendaten auf zwischengespeicherten Seiten abrufen können, kann ich nichts tun. Sie benötigen Zugriff auf die Sitzung, um kundenspezifische Daten abzurufen.
jedoch , für Ajax / ruft ESI Katalog spezifische Daten (wie begrenzt verfügbar) Ich sehe nicht , keine Notwendigkeit für eine Sitzung gibt es auf diesem Antrag überhaupt zu bekommen. Mein Plan für die Zukunft ist es, eine Erweiterung des Aoe_BlackHoleSession
Moduls auszuprobieren, damit ich Anforderungen an eine bestimmte URL als sitzungslos ausschließen kann.
Die Interna von ESI sind mir weniger vertraut, so dass ich dort leider nicht viel zu kommentieren habe.
Eine Alternative
Während der Konferenz sagte Fabrizio Branca, er sei in der Lage, die Sitzungssperre vollständig ohne negative Auswirkungen zu deaktivieren. Der Test erfolgt auf eigenes Risiko.