Bunu New Relic'te de çok gördüm.
Gördüğüm kadarıyla birkaç farklı neden var, bu konuyu tam olarak anlayamıyorum, ancak son zamanlarda araştırdığım bir şey. İşte bulgularım.
Magento, Kilitleme ve Yeni Kalıntıdaki Oturumlar
Magento'daki her denetleyici eylemi, gerekip gerekmediğine bakılmaksızın oturumu kullanır. Oturum Mage_Core_Controller_Varien_Action :: preDispatch içinde hevesle başlatılır
Oturum kilitlemeyi etkinleştirdiyseniz, bu, istek süresince oturumun istek tamamlanana kadar kilitlendiği anlamına gelir. Henüz oturum kilidini açan kod biraz bulamadım, ama orada bir yerde olduğundan eminim.
Sonuçta bu, aynı oturumu kullanarak bir konumdan Magento denetleyici eylemlerine birden fazla eşzamanlı istek gönderirseniz, bu isteklerin bazılarının oturumun tamamlanmasını ve kilidinin devam etmesini beklemeniz gerekir. Ben genellikle bu Mage_Core_Model_Session_Abstract_Varien::start
~ ~ 30 saniye sıkışmış yeni kalıntı yavaş bir işlem olarak görüyorum (benim oturum kilidi bekleme zaman aşımı sanırım).
New Relic hakkındaki bu raporda gördüğüm gibi birçok olumsuz tarafı var
- Toplam talep yanıt süresini yavaşlatır, çünkü bu istekler aksi takdirde olması gerekenden daha yavaştır.
- Örneğin, 20 saniye süren performans darboğazlarım varsa, New Relic en yavaş işlemlerin bir örneğini kaydeder. Zaman aşımları yararlı verileri gizliyor.
Nedenler
Bunun için birkaç yaygın neden gördüm, kesin bir liste değil
botlar
Baidu ve Yandex gibi tarayıcılar biraz kaba olmak ve web sitesini dövmek. Tek bir yerden, aynı oturumu kullanarak ve oturum kilitleme mekanizmasını açarak sayısız istekleri tetikliyorlar, bu nedenle Yeni Kalıntı'da yavaş işlemler gösteriyorlar.
Ajax Magento denetleyici eylemlerini çağırıyor
Vernikli web siteleri ile müşteriye özel veriler özenle yüklenmelidir, bazı web siteleri bunu gerekli verileri almak için Magento arka ucuna ajax çağrıları kullanarak yönetir. Ayrıca, bir ürün satışta olduğunda stokta kalan miktar gibi ürüne özel bilgiler almak için arka uca ajax çağrılarını kullanan bazı web siteleri gördüm.
Tek bir sayfa, sayfa yüklenirken arka uca birden fazla ajax çağrısını tetiklerse, potansiyel olarak oturum kilitleme mekanizmasını tetikleyebilir. Ajax Magento arka ucuna ne kadar çok geri çağırırsa kilitleme deneyimi o kadar artar.
Vernik ESI
Gerçekten aynı, ajax çağrıları kullanmak yerine arka uca yeni çağrılar gibi görünen Kenar Tarafı İçerir kullanır.
Planım
Bunu henüz yapmadım, bu yüzden hala tamamen teorik, ama önümüzdeki birkaç ay içinde yapmak istediğim bir şey.
Bu sorunu Mage Titans İngiltere 2016 konferansı sırasında gündeme getirdim ve Fabrizio Branca beni şu modüle doğru işaret etti: https://github.com/AOEpeople/Aoe_BlackHoleSession .
Düzenli bir ifadeye dayanarak modül Botların gerçek oturumlar oluşturmasını önleyecektir, bunun hiçbir oturum kilidine basılmayacağı ve oturum kaynaklarınızın kaba botlarla dövülmeyeceği avantajı olmalıdır. Botlar artık Yeni Kalıntı okumalarınızı kirletmemelidir.
Ajax / ESI çağrılarının önbelleğe alınmış sayfalarda müşteri verilerini alması için görebildiğim hiçbir şey yok. Müşteriye özel verileri almak için oturuma erişiminiz olması gerekir.
Ancak , ajax / ESI çağrıları katalog belirli veri (sınırlı stok gibi) almak için bu istek üzerine hiç bir oturum var için herhangi bir ihtiyaç görmüyorum. Gelecekle ilgili planım, Aoe_BlackHoleSession
belirli bir URL'ye yapılan istekleri oturumsuz olarak silolayabilmem için modülün bir uzantısını denemektir.
ESI'nin içlerine daha az aşinayım, ne yazık ki orada yorum yapacak çok fazla şeyim yok.
Bir alternatif
Konferans sırasında Fabrizio Branca, oturum kilitlemesini herhangi bir olumsuz etki olmadan tamamen devre dışı bırakabildiğini söyledi, kendi sorumluluğunuzdadır test edin.