2017-02-20 16 views
17

हम केकेपीएचपी 2.9 चला रहे हैं, और सत्र संग्रहण के लिए लोचदार क्लस्टर का उपयोग कर (जिसे मेमकैच के माध्यम से संग्रहीत किया जाता है)।केकसेशन :: _ startSession - लोचदार पर धीमा

हम विकलांग पीएचपी के दशक में निर्मित सत्र कचरा संग्रहण है के रूप में यहाँ की सिफारिश की: https://tideways.io/profiler/blog/php-session-garbage-collection-the-unknown-performance-bottleneck

session.gc_probability = 0

हम भी CakePHP का कैश config भीतर 0 करने के लिए probability सेटिंग निर्धारित किया है।

हालांकि;

Slow CakeSession::_startSession

Elasticache क्लस्टर किसी भी मैट्रिक्स जो सुझाव है कि वहाँ एक समस्या है नहीं दिखा रहा है: हम अभी भी मुद्दों जिससे कभी-कभी हम CakeSession में प्रमुख धीमी-चढ़ाव का अनुभव :: _ startSession, के रूप में नई अवशेष द्वारा रिपोर्ट आ रही हैं, (जब तक कि कुछ मीट्रिक नहीं है मैं सही ढंग से समझ नहीं रहा हूं)।

इस कारण का निदान करने के तरीके पर कोई सुझाव?

+0

क्या वीआरसी पर वेबसाइवर ElasticCache के रूप में हैं? – apokryfos

+0

@apokryfos हां - सभी एक ही सुरक्षा समूह के भीतर - क्या आपका मतलब था? – user984976

+0

कोई वीपीसी securty समूह के समान नहीं है। वीपीसी सेवाओं के लिए एक लैन की तरह है। [Faq पेज आउट] की जांच करें (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Introduction.html) – apokryfos

उत्तर

0

यह समस्या सत्र लॉकिंग के कारण हुई है, कुछ ऐसा जो मुझे पता भी नहीं था।

यह लेख बताता है कि कैसे और क्यों सत्र लॉकिंग मौजूद है: https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/

क्या महत्वपूर्ण है memcached सत्र ताला डिफ़ॉल्ट रूप से चालू किया है।

हमारे मामले में, हम प्रमाणीकरण के अलावा अन्य के लिए सत्र का उपयोग नहीं करते हैं, हमारा एप्लिकेशन उपयोगकर्ता राज्य (जैसे शॉपिंग कार्ट की तरह) को संग्रहीत करने के लिए सत्र जानकारी का उपयोग नहीं करता है, इसलिए हमने php.ini के साथ सत्र लॉकिंग को अक्षम कर दिया है सेटिंग:

memcached.sess_locking = 0

यह परिवर्तन करने के बाद से, हम प्रतिक्रिया समय में एक विशाल सुधार को देखकर किया है (~ 200 मि.से औसत ~ 160 के लिए)। यह विशेष रूप से AJAX- भारी पृष्ठों पर ध्यान देने योग्य है जो समसामयिक रूप से बहुत सारे डेटा लोड करते हैं। इससे पहले ऐसा लगता है कि इन अनुरोधों को अनुक्रमिक रूप से लोड किया जा रहा था, हालांकि वे अब सभी एक साथ सर्विस किए गए हैं, गति में अंतर अविश्वसनीय है।

हालांकि कुछ किनारे के मामले हैं, हम आने वाले हफ्तों/महीनों में सत्र लॉकिंग बंद करने के परिणामस्वरूप उजागर करेंगे, यह इस मुद्दे का कारण प्रतीत होता है, और इस परिवर्तन से समस्या को रोक दिया गया है होने वाली।

0

आपको यह पता लगाने के लिए कि कौन सी परत समस्याएं पैदा कर रही है, आपको डीकॉप्लेड तरीके से डीबग करने की आवश्यकता है।

यह केक, एडब्ल्यूएस बुनियादी सुविधाओं, नेटवर्क विलंबता ...

भागो इस छोटी सी PHP स्क्रिप्ट हो सकता है और हमें समय ले लिया बता सकते हैं।

// memcache 
$m = microtime(true); 
$memcache_obj = new Memcache; 
$memcache_obj->connect('myhost.cache.amazonaws.com', 11211); 
printf('%.5f', microtime(true) - $m) ; 

// memcached. 
$time = microtime(true); 
$m = new Memcached(); 
$m->addServer('<elasticache node endpoint>', 11211); 

$m->set('foo', 100); 
var_dump($m->get('foo')); 
printf('%.5f', microtime(true) - $time) ; 

यदि समय ठीक है, तो समस्या केक होगी।

हालांकि यहां ईमानदार होने के नाते, मुझे काफी यकीन है कि समस्या एलिस्टी कैश क्लस्टर है।

नोड के बिंदु और अंत बिंदु को इंगित करने का प्रयास करें और एलिस्टी कैश क्लस्टर के अंत बिंदु पर नहीं और मुझे बताएं कि टीआई कैसे जाती है।

+0

"मेमकैच" स्थापित नहीं है, केवल "Memcached" - क्या आप जानते हैं कि इसे मेमकैच के साथ कैसे किया जाए? – user984976

संबंधित मुद्दे