দীর্ঘ রানিং অ্যাডমিন পৃষ্ঠা অনুরোধ অন্য অনুরোধগুলি ব্লক করে


17

যদি আমি ম্যাজেন্টোর ব্যাকএন্ডে লগইন করেছি এবং এমন কিছু কাজ সম্পাদন করতে যা দীর্ঘ সময় নেয় (বড় ক্যাটালগগুলিতে বিশ্বব্যাপী অনুসন্ধান, দীর্ঘ চলমান ডেটাফ্লো ইত্যাদি), তবে আমার ওয়েব ব্রাউজারটি কেবলমাত্র সেই ব্রাউজারে অন্যান্য অ্যাডমিন পৃষ্ঠাগুলি লোড করতে অস্বীকার করবে । কেন এটি ঘটে, এবং কর্মক্ষেত্রের জন্য কোনও জ্ঞানবিজ্ঞান আছে?

অর্থাৎ, আমি যদি

  1. ম্যাজেন্টোর ড্যাশবোর্ড পৃষ্ঠাতে লগইন করুন

  2. যে কোনও Magento প্রশাসক পৃষ্ঠা সহ একটি দ্বিতীয় ট্যাব খুলুন Open

  3. প্রথম ট্যাবে দীর্ঘ চলমান বিশ্বব্যাপী অনুসন্ধান ( sleep(30)শুরুতে একটি কল দিয়ে সিমুলেটেড globalSearchAction) সঞ্চালন করুন

  4. দ্বিতীয় ট্যাবটি পুনরায় লোড করার চেষ্টা করুন

প্রত্যাশিত আচরণ: তাত্ক্ষণিকভাবে পৃষ্ঠাগুলির সাথে দ্বিতীয় ট্যাব লোড হয়

আসল আচরণ: দ্বিতীয় ট্যাব কেবলমাত্র দীর্ঘ সময় ধরে চলমান বিশ্বব্যাপী অনুসন্ধান সম্পূর্ণ হওয়ার পরে লোড হয়

কেউ কি জানেন, বিশেষত, কেন এমন হয়? (আমার অনুমান ম্যাগেন্টো অ্যাডমিন কনসোলের অনুরোধগুলি কিছু রিসোর্স লক করেছে ম্যাগেন্টোকে বুটস্ট্র্যাপ করতে হবে, তবে আমি জানি না এটি কী)

কেউ কি কোনও স্থির / কর্মক্ষেত্র সম্পর্কে জানেন?


1
আপনি স্যার আমাকে সবেমাত্র একটি চ্যালেঞ্জের জন্য প্রেরণ করেছেন! :)
ডেভিডালগার 15'13

উত্তর:


21

পিএইচপি সেশন হ্যান্ডলার দ্বারা রাখা একটি লক দ্বারা সমস্যা দেখা দেয়। সুতরাং এটি ম্যাজেন্টো স্পষ্টভাবে কিছু লক করে অ্যাডমিন অনুরোধগুলি ব্লক করার চেষ্টা করছে না, তবে ফাইল-ভিত্তিক সেশন স্টোরেজের প্রতি সে-পার্শ্ব-প্রতিক্রিয়া।

প্রাথমিক (দীর্ঘ-চলমান) অনুরোধ দ্বারা এটি খুললে সেশন ডেটা ফাইলটিতে একটি রাইটিং লক স্থাপন করা হয়, যার ফলে দ্বিতীয় কলটি যখন কল 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 সেকেন্ড সময় নিয়েছিল, যা আমাকে গবেষণার জন্য একটি দুর্দান্ত পয়েন্ট দিয়েছে।

সম্পাদনা: আগ্রহীদের জন্য, আমি ম্যাকক্যালগ্রিন্ডে দেখা "ক্যাশেগ্রিন্ড" ফাইলটির একটি স্ক্রিনশট টুইটারে পোস্ট করেছি ।


এই সমস্যাটি এড়াতে অ্যানিরগির ইউর্যাপিডফ্লো মডিউলটি অধিবেশনটি বন্ধ করে দেয়, এটি একরকম দুর্দান্ত তবে এটি হতাশার সাথে হতাশাজনক কারণ এটি পরবর্তীকালে ব্যবহারকারীকে প্রতিক্রিয়া জানানো কঠিন করে তোলে।
পিটার ও'ক্যালাহান

@ ডেভিডালগার - ক্লায়েন্ট সাইটের জন্য আপনি সাধারণত কোন সেশন স্টোরেজ স্থাপন করেন?
অ্যালান ঝড়

3
পুনরায়: পিএইচপি সেশন ফাইলটি লক করা, ডেটা অখণ্ডতার জন্য এটি ফাইল-অন-ডিস্কেরই অখণ্ডতার জন্য কম। একাধিক প্রক্রিয়া ডিস্কে বিটগুলিতে খোলার এবং লেখার ফলে (যা কোনও ফাইল তা) দ্রুত ডেটা দুর্নীতিতে ডেকে আনবে। মাইএসকিউএল, রেডিস এবং বেশিরভাগ ডাটাবেসগুলি প্রায় একই সময়ে একাধিক লেখার পরেও সামঞ্জস্য রাখতে বিশেষভাবে ডিজাইন করা হয়েছে। অর্থাত্ লকিংটিকে উপেক্ষা করা হয়নি, এটি সমালোচনামূলকভাবে প্রয়োজনীয় নয় needed
অ্যালান ঝড়

@ অ্যালানস্টোরম - লোড-ভারসাম্য ইনস্টলেশন, একক অ্যাপ্লিকেশন নোড ক্লাস্টারগুলির জন্য ফাইল-সিস্টেমের জন্য একটি উত্সর্গীকৃত মেমক্যাচ করা উদাহরণ। আপনার কোনও আইপি ল্যাটেন্সি না থাকায় আপনার যেখানে একাধিক নোড নেই সেখানে ফাইল-সিস্টেমটি সেরা সঞ্চালন করে।
ডেভিডালগার

সঠিক, ফাইল লক করা ডেটা দুর্নীতি প্রতিরোধ সম্পর্কে। যাইহোক, অধিবেশন বন্ধ না হওয়া পর্যন্ত লক ধরে রাখা তথ্য হ্রাস রোধ সম্পর্কে। যদি দুটি প্রক্রিয়া সেশন ডেটা লোড করে, এটি সংশোধন করে এবং তারপর এটি লিখতে থাকে, তাদের মধ্যে একটিতে এটির পরিবর্তনগুলি ওভাররাইট করা হবে। সাধারণত একটি সমালোচনামূলক সমস্যা হয়ে দাঁড়াচ্ছে না, তবে ডেটা ক্ষতি এবং / অথবা দুষ্টু সমস্যাগুলি ডিবাগ করা কঠিন হতে পারে।
ডেভিডালগার 15'13
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.