পিএইচপি সেশন হ্যান্ডলার দ্বারা রাখা একটি লক দ্বারা সমস্যা দেখা দেয়। সুতরাং এটি ম্যাজেন্টো স্পষ্টভাবে কিছু লক করে অ্যাডমিন অনুরোধগুলি ব্লক করার চেষ্টা করছে না, তবে ফাইল-ভিত্তিক সেশন স্টোরেজের প্রতি সে-পার্শ্ব-প্রতিক্রিয়া।
প্রাথমিক (দীর্ঘ-চলমান) অনুরোধ দ্বারা এটি খুললে সেশন ডেটা ফাইলটিতে একটি রাইটিং লক স্থাপন করা হয়, যার ফলে দ্বিতীয় কলটি যখন কল session_start
হয় তখন লকটি প্রকাশ না হওয়া অবধি বন্ধ হয়ে যায়Mage_Core_Model_Session_Abstract_Varien::start
এটি 100% প্রজননযোগ্য। আপনি একই পদ্ধতিটি ব্যবহার করেছেন, sleep(30)
শীর্ষে একটি যুক্ত করেMage_Adminhtml_IndexController::globalSearchAction
লক্ষণীয় বিষয় হ'ল আপনি যদি ডিবি সেশন স্টোরেজ ব্যবহার করেন তবে এটি পুনরুত্পাদন করা যাবে না। আমি মূল কারণটি সন্ধান করার পরে, আমি সেশন স্টোরেজ ডিবিতে একটি স্যান্ডবক্স সেট করেছিলাম এবং এই সমস্যাটি আর পুনরুত্পাদন করতে পারিনি। সুতরাং ডিবি সেশন হ্যান্ডলারগুলি ম্যাজেন্টো আপাতদৃষ্টিতে সেশন রাইটগুলি লক করতে সারি-স্তরের লকিং ব্যবহার করবেন না। আমি এটি আকর্ষণীয় মনে করি, কারণ এতে সেশন ডেটা হ্রাস হওয়ার সম্ভাবনা রয়েছে কারণ অ্যাপ্লিকেশনটি সম্ভবত একই সেশনে একাধিক থ্রেড লেখার জন্য অ্যাকাউন্টিং করছে না। পাঠকদের জন্য নোট: এটির চেষ্টা ও সমাধানের জন্য আমি কখনই উত্পাদনে ডিবি সেশন স্টোরেজ ব্যবহার করব না, এটি আপনার মাইএসকিএল ডাটাবেসকে ওভারলোড করার জন্য কেবল ভাল।
আমি রেডিসের মতো মেমরি ভিত্তিক সেশন স্টোরেজ সিস্টেমগুলি ব্যবহার করে আচরণটি পুনরায় উত্পাদনের চেষ্টা করিনি, তবে আমার অনুমান যে সেশন স্টোরের রেকর্ডগুলি লক করা সম্ভবত এগুলিতেও উপেক্ষা করা হয়েছিল।
session_write_close
দীর্ঘমেয়াদী কাজ শুরু করার আগে লকটি ছেড়ে দেওয়ার মতো ব্যবহার এড়াতে এমন কৌশল রয়েছে যা ব্যবহার করতে পারে । তবে আপনি এটি বন্ধ করে দেওয়ার পরে এটি আপনাকে সেশনে লেখার হাত থেকে বাধা দেবে। সুতরাং এটি ম্যাজেন্টোতে বোর্ড জুড়ে সহজেই প্রয়োগ করা হবে না, তবে নির্দিষ্ট রুট / নিয়ন্ত্রকগুলিতে সম্ভবত এটি প্রয়োগ করা যেতে পারে।
এটির মূল কারণ হিসাবে এটি পিন করার জন্য আমার কৌশলটি ছিল এক্সডিবাগ প্রোফাইলার সক্ষম করা এবং "ক্যাশেগ্রিন্ড" ফাইলটি পরীক্ষা করা। দ্বিতীয় অনুরোধটি শেষ হয়ে গেলে, আমি আউটপুট ফাইলটি (~ 25 মেগাবাইট লগ) ম্যাককলগ্রিনে লোড করে এবং অন্তর্ভুক্তির সময়টি 28 সেকেন্ড বা তারও বেশি সময় ধরে কলের পথ অনুসরণ করে ট্রেসে নামিয়ে আনি । এটি শেষ পর্যন্ত আমাকে session_start
কলটিতে নিয়ে যায় যা চালাতে to 28 সেকেন্ড সময় নিয়েছিল, যা আমাকে গবেষণার জন্য একটি দুর্দান্ত পয়েন্ট দিয়েছে।
সম্পাদনা: আগ্রহীদের জন্য, আমি ম্যাকক্যালগ্রিন্ডে দেখা "ক্যাশেগ্রিন্ড" ফাইলটির একটি স্ক্রিনশট টুইটারে পোস্ট করেছি ।