MEMCACHE 세션 스토리지가있는 카테고리 페이지에서 Magento varien 세션 시작이 매우 느림


13

내가 사용하고 memcache세션 저장 및 카테고리 페이지에 나는 varien 세션 시작 30 초 이상 걸릴 수있는 새로운 유물 거래에 나타났습니다.

세션 잠금과 관련이있을 수 있지만 memcache를 사용할 때 이것이 실제로 문제가되지 않는다고 생각했습니다.

누구 든지이 문제에 직면 했거나이 문제를 일으킬 수있는 아이디어가 있습니다.

답변:


5

나는 New Relic에서도 이것을 많이 보았다.

내가 본 것에서 몇 가지 다른 원인이 있지만이 문제에 대해 완전히 이해하지 못했지만 최근에 살펴본 것입니다. 여기 내 결과가 있습니다.

마 젠토, 잠금 및 새로운 유물 세션

Magento의 모든 컨트롤러 작업은 필요 여부에 관계없이 세션을 사용합니다. 세션은 Mage_Core_Controller_Varien_Action :: preDispatch 에서 열심히 인스턴스화됩니다.

세션 잠금이 활성화 된 경우 요청 기간 동안 요청이 완료 될 때까지 세션이 잠겨 있음을 의미합니다. 아직 세션 잠금을 해제하는 코드를 찾지 못했지만 어딘가에있을 것이라고 확신합니다.

궁극적으로 이는 동일한 세션을 사용하여 한 위치에서 Magento 컨트롤러 작업에 대한 여러 동시 요청을 발생시키는 경우 해당 요청 중 일부가 세션을 완료하고 잠금을 해제하여 진행할 때까지 기다려야 함을 의미합니다. 나는 보통 이것을 새로운 유물에 대한 느린 트랜잭션으로 Mage_Core_Model_Session_Abstract_Varien::start~ 30 초 동안 멈췄습니다 (세션 잠금 대기 시간 초과라고 생각합니다).

New Relic에 대한이 보고서는 내가 본 것처럼 여러 가지 단점이 있습니다.

  • 요청이 다른 것보다 느리기 때문에 총 평균 응답 시간이 느려집니다.
  • 예를 들어 20 초가 걸리는 성능 병목 현상이있는 경우 New Relic은 가장 느린 트랜잭션 샘플을 기록합니다. 세션 잠금 시간 초과로 인해 같은 URL이 괴롭히는 경우 New Relic에서 자동으로보고하지 않습니다. 시간 초과가 유용한 데이터를 숨기고 있습니다.

원인

나는 이것에 대한 몇 가지 일반적인 원인을 보았습니다.

Baidu와 Yandex와 같은 크롤러는 약간 무례하고 웹 사이트를 강타합니다. 동일한 세션을 사용하여 여러 요청을 발생시키는 한 위치에서 실행되고 세션 잠금 메커니즘을 트립하므로 New Relic에서 느린 트랜잭션이 표시됩니다.

Magento 컨트롤러 작업에 대한 Ajax 호출

니스 웹 사이트에서는 고객 별 데이터를주의해서로드해야하며 일부 웹 사이트는 Magento 백엔드에 대한 ajax 호출을 사용하여 필요한 데이터를 가져 와서이를 관리합니다. 또한 백엔드에 대한 ajax 호출을 사용하여 상품 판매시 재고 잔량과 같은 상품별 정보를 얻는 일부 웹 사이트를 보았습니다.

단일 페이지가 페이지로드시 백엔드에 대한 여러 ajax 호출을 트리거하는 경우 세션 잠금 메커니즘을 트리거 할 수 있습니다. Magento 백엔드에 대한 더 많은 아약스 호출은 잠금을 경험할 가능성이 높습니다.

광택 ESI

ajax 호출을 사용하는 대신 백엔드에 대한 새로운 호출 인 Edge Side Includes를 사용한다는 점을 제외하고는 위와 동일합니다.

내 계획

나는 이것을 아직 행동하지 않았으므로 여전히 이론적으로는 이론적이지만 앞으로 몇 개월 동안 내가하고있는 일입니다.

나는 Mage Titans UK 2016 컨퍼런스 에서이 문제를 제기했으며 Fabrizio Branca는 다음 모듈을 지적했습니다 : https://github.com/AOEpeople/Aoe_BlackHoleSession .

정규식을 기반으로 모듈은 봇이 실제 세션을 생성하지 못하게하므로 세션 잠금이 발생하지 않으며 무례한 봇에 의해 세션 리소스가 타격을받지 않는 이점이 있습니다. 봇은 더 이상 New Relic 수치를 오염시키지 않아야합니다.

캐시 된 페이지에서 고객 데이터를 얻기위한 ajax / ESI 호출의 경우 내가 볼 수있는 작업이 없습니다. 고객 별 데이터를 검색하려면 세션에 액세스해야합니다.

그러나 카탈로그 한정 데이터와 같은 카탈로그 특정 데이터를 얻기위한 ajax / ESI 호출의 경우 해당 요청에 대해 세션이 전혀 필요하지 않습니다. 미래에 대한 계획은 Aoe_BlackHoleSession모듈에 대한 확장을 시험하여 세션이없는 특정 URL에 대한 요청을 사일로 오프 할 수 있도록하는 것입니다.

나는 ESI의 내부에 익숙하지 않기 때문에 슬프게도 언급 할 것이 너무 없다.

대안

회의 중에 Fabrizio Branca는 아무런 영향을주지 않고 세션 잠금을 완전히 비활성화 할 수 있다고 전했다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.