asp.net-mvc - वरण - साफ सफाई के चित्र




आईआईएस पूल रीसायकल पर पुरानी कार्यकर्ता प्रक्रियाओं(w3wp.exe) की सफाई क्यों नहीं कर रहा है जिससे स्मृति अपवाद से वेबसाइट पर जा सके? (3)

एप्लिकेशन पूल रीसायकल आमतौर पर पुरानी कार्यकर्ता प्रक्रियाओं को बंद कर देता है, इसलिए मुझे नहीं लगता कि आपने आईआईएस की एक बग मारा है।

ध्यान दें कि यदि वे अनाथ हो जाते हैं तो प्रक्रिया अधिक समय तक जीवित रह सकती है, और कॉन्फ़िगरेशन IIS के आधार पर उन्हें समस्या निवारण के लिए वहां छोड़ देना चाहिए,

https://www.iis.net/configreference/system.applicationhost/applicationpools/add/failure

यदि आप ऐसी प्रक्रियाओं को डीबग करने से काफी परिचित नहीं हैं, तो मेरा सुझाव है कि आप http://support.microsoft.com के माध्यम से एक समर्थन केस खोलें और माइक्रोसॉफ्ट समर्थन लोगों को आपकी मदद करने दें।

मेरे पास एक asp.net-mvc साइट है और हाल ही में मुझे अपने वेब सर्वर पर मेमोरी अपवादों से बाहर निकलना है। मेरे पास केवल 1 एप्लिकेशन पूल है और हमने हाल ही में एक निश्चित सीमा को हिट करने के बाद आईआईएस को रीसायकल करने के लिए सेट किया है। मैं दूसरे दिन गया और 4 w3wp.exe प्रक्रियाओं को चल रहा था (प्रत्येक ~ 1.8 जीबी मेमोरी के साथ इस्तेमाल किया जा रहा था)

मुझे लगता है कि रीसायकल प्रक्रिया के दौरान, यह पुराने कार्यकर्ता की प्रक्रिया को नहीं मार रहा है और अंततः मैं अपनी वेबसाइट पर स्मृति अपवादों से बाहर हूं क्योंकि बॉक्स में केवल 8 जीबी मेमोरी है। मैं बॉक्स में मेमोरी जोड़ सकता हूं लेकिन मुझे चिंता है कि इन पुरानी प्रक्रियाओं को साफ क्यों नहीं किया जा रहा है।

क्या इस रीसायकल प्रक्रिया पुराने w3wp.exe प्रक्रियाओं को मार नहीं रही है और उन्हें चल रही है, यह जानने के लिए कोई सिफारिशें हैं? इस जोखिम से आगे बढ़ने के लिए मूल कारण या यहां तक ​​कि कामकाज दोनों को समझने के आसपास कोई सुझाव?


चूंकि यह आपके द्वारा स्पष्ट है कि एक निश्चित सीमा को हिट करने के बाद आईआईएस को रीसायकल करने के लिए सेट करना एक नया एप्लीकेशन पूल बना रहा है।

पुरानी समाप्ति न होने के कई कारण हो सकते हैं।

कोई भी स्मृति रिसाव हो सकता है, अन-प्रबंधित संसाधनों का निपटान नहीं कर सकता, आप इसे देख सकते हैं।

एक अन्य कारण जानने के लिए, आईआईएस में "प्रक्रिया अनाथ" सक्षम करें । अपराधी प्रक्रिया को जानने के लिए आप " प्रोसेस एक्सप्लोरर " का उपयोग कर सकते हैं।

आपके पास निष्पादन योग्य सेट करने का विकल्प भी है, जब प्रक्रिया अनाथ / त्याग की जाती है तो इसे निष्पादित किया जाएगा।

एक निश्चित CPU सीमा के बाद तुरंत समाधान KillW3p पर कार्रवाई सेट करने के लिए हो सकता है।

<applicationPools>
   <add name="DefaultAppPool">
     <cpu limit="80000" action="KillW3wp" resetInterval="00:02:00" />
   </add>
</applicationPools>

प्राथमिक संदिग्ध जो आपको बाद में जाना चाहिए वह कक्षाएं हैं जो IDisposable लागू करती हैं और उनमें से कोई भी उपयोग जो Dispose() कॉल नहीं करती है। मेरे पास एक समान समस्या थी, जिसे मैंने पहले ही इस प्रश्न के उत्तर के रूप में पोस्ट कर दिया है।

सबसे संभावित कारण यह है कि आप कॉल नहीं कर रहे हैं। डेटाबेस कनेक्शन पर .Dispose() उपयोग करें। लोग इसके बारे में भ्रमित हो जाते हैं क्योंकि .NET का अंतर्निहित कनेक्शन पूल ऐसा लगता है कि आपको कनेक्शन का निपटान नहीं करना चाहिए। हालांकि, अनुरोध के अंत में (या जब आप कनेक्शन का उपयोग कर समाप्त कर लेते हैं .Dispose() कॉलिंग .Dispose() को संसाधन लीक को रोकने के लिए आपको क्या करना चाहिए। कनेक्शन पूलिंग होने की उम्मीद है।

मुझे नहीं लगता कि 4 w3wp.exe प्रक्रियाएं चिंता का विषय हैं - आईआईएस के लिए कई प्रक्रियाओं को उत्पन्न करना सामान्य है। लेकिन यह स्पष्ट है कि आपके आवेदन में संसाधन रिसाव हैं जिन्हें संबोधित करने की आवश्यकता है। उपर्युक्त उल्लेख के रूप में IDisposable को देखकर शुरू करें। यदि आपको अभी भी समस्याएं हैं, तो कैश में आपके पास मौजूद आइटमों पर नज़र डालें और यह निर्धारित करने का प्रयास करें कि क्या एक अधिक कुशल कैशिंग रणनीति है जिसका आप उपयोग कर सकते हैं। यदि सब कुछ विफल हो जाता है, तो यह देखने के लिए एप्लिकेशन को प्रोफ़ाइल करें कि आप संसाधन रिसाव के स्रोत का पता लगा सकते हैं या नहीं। सबसे अधिक संभावना है कि आपका आवेदन कहीं भी IDisposable लागू करना चाहिए, यह नहीं है।





w3wp