Magento-Sitzungen beginnen auf Kategorieseiten mit MEMCACHE-Sitzungsspeicher sehr langsam


13

Ich verwende es memcachefür die Sitzungsspeicherung und auf Kategorieseiten, die ich bei neuen Relikttransaktionen bemerkt habe, bei denen der Start einer Sitzung mehr als 30 Sekunden dauern kann.

Es kann möglicherweise etwas mit dem Sperren von Sitzungen zu tun haben, aber ich dachte, dass dies bei der Verwendung von Memcache kein wirkliches Problem darstellt.

Jeder, der jemals damit konfrontiert wurde oder Ideen hat, was dies verursachen könnte.

Antworten:


5

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::startfü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_BlackHoleSessionModuls 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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.