मेरे पास AsyncController
है जो लंबे समय तक मतदान करने के लिए सेट अप करता है। यह सब ठीक काम करता है, हालांकि एक सहयोगी ने सर्वर पर एक स्मृति रिसाव देखा है जो हर नए कनेक्शन के साथ बढ़ता प्रतीत होता है।एमवीसी 4 आईआईएस मेमोरी रिसाव
मैंने इस पृष्ठ से हजारों बार अनुरोध करने के लिए एक छोटा सा एप्लीकेशन बनाया है और मैं आईआईएस प्रक्रिया के लिए स्मृति उपयोग की निगरानी कर रहा हूं। प्रत्येक कनेक्शन मेमोरी उपयोग को बढ़ाता है, लेकिन क्लाइंट डिस्कनेक्ट होने पर सभी तरह से नीचे नहीं आ जाता है।
आगे की जांच पड़ताल करने के बाद, मैंने पाया कि यह अभी भी होता है जब मैं एक मानक Controller
कि कुछ भी नहीं इस लेकिन करता है के साथ अपने AsyncController
बदल देते हैं:
public class WaitController : Controller
{
public JsonResult Member(string oauth_token, int service_id, bool busy = false)
{
return Json(new
{
ready = false,
}, JsonRequestBehavior.AllowGet);
}
}
हालांकि इस में, वहाँ के रूप में बहुत ज्यादा नहीं है स्मृति उपयोग , व्यवहार बिल्कुल वही प्रतीत होता है।
मैंने 10,000 कनेक्शन के बीच अंतर दिखाने के लिए एक मेमोरी प्रोफाइलर चलाया है और वहां कुछ भी नहीं है। सबसे अधिक स्मृति ExpiresEntry[]
के System.Web.Caching
या System.Runtime.Caching
के उदाहरणों द्वारा उठाई जाती है, हालांकि आईआईएस कार्यकर्ता प्रक्रिया में मुझे स्मृति वृद्धि के मुकाबले यह कुछ भी नहीं है।
मेरा प्रश्न है, क्या आईआईएस डिज़ाइन द्वारा ऐसा कर रहा है? शायद यह कनेक्शन धागे के लिए आवंटित किया गया था, जो कि बाद में मामले में लटक रहे हैं, उन्हें बाद में आवश्यकता है? क्या यह आईआईएस, एएसपी.नेट या एमवीसी 4 के साथ एक बग है?
इसके लिए एमवीसी 4 की वेबएपीआई सुविधाओं का उपयोग करने का मेरा निर्णय था क्योंकि हम चाहते हैं कि यह लचीला, रखरखाव योग्य, भविष्य-सबूत हो और AJAX के माध्यम से पहुंचा जा सके। यह विकास के दृष्टिकोण से भी समझ में आया, क्योंकि हमने एमवीसी 4 में भी वेबसाइट बनाई है।
हालांकि, एक सहयोगी ने अब इसे सिस्टम आर्किटेक्चर के साथ एक महत्वपूर्ण समस्या के रूप में उठाया है क्योंकि हम (भविष्य में) हजारों ग्राहकों से जुड़े होंगे। वह सुझाव दे रहा है कि हम इसके बजाय डब्ल्यूसीएफ का उपयोग करें। तो, बोनस सवाल - डब्ल्यूसीएफ का उपयोग इन समस्याओं को हल करेगा?
क्या आप वाकई लीक कर रहे हैं? क्या यह संभव है कि यह सिर्फ उस पर पकड़ रहा है क्योंकि इसे देने के लिए पर्याप्त दबाव नहीं है? क्या आपने सत्यापित किया है कि यदि आप अपना कनेक्शन परीक्षण जारी रखते हैं तो सर्वर अंततः स्मृति से बाहर हो जाएगा? – Pete
@Pete यह धीमा शुरू हो जाता है। मैंने इसे वास्तव में स्मृति से बाहर नहीं देखा है, लेकिन पूरे एप्लिकेशन पूल धीरे-धीरे उस बिंदु पर धीमा हो जाता है जहां यह उपयोग करने योग्य नहीं है। यह एप्लिकेशन पूल को पुनरारंभ करके हल किया गया है। क्या आवंटित स्मृति को छोड़ने के लिए आईआईएस को 'दबाव' की आवश्यकता है? मुझे लगता है कि खराब प्रदर्शन संसाधित होने के लिए कतार में बस प्रत्येक कनेक्शन इंतजार कर सकता है। – Connell