कुछ तथ्य: हमने डब्ल्यूसीएफ सेवा विकसित की है जो ग्राहकों और डेटाबेस के बीच एक परत के रूप में कार्य करता है। यह स्वस्थ है और विंडोज सेवा के रूप में चलता है।.NET Garbagecollector परेशानी। 15-40 मिनट के लिए ब्लॉक
सेवा कई कैश रखती है, जहां सबसे बड़ी स्मृति में 1-2 जीबी है। कुल स्मृति उपयोग आमतौर पर लगभग 5-8 जीबी होता है। कनेक्शन डुप्लेक्स हैं और टीसीपी प्रोटोकॉल का उपयोग करते हैं और serialization protobuf-net के साथ बनाया जाता है। हमारी कनेक्ट क्लाइंट गिनती आमतौर पर 1000-1500 से होती है। सर्वर 64 जीबी मेमोरी के साथ नए मॉडल का 8-कोर xeon है और सेवा के बाद और कुछ नहीं चलाता है।
समस्या: एक्स समय के बाद, यह एक दिन से एक सप्ताह तक हर जगह रहा है, सेवा बहुत धीमी हो जाती है। अनुरोध जो 0.5 सेकंड लेते हैं, एक मिनट से अधिक समय ले सकते हैं। यह व्यवहार 15-40 मिनट तक चलता है या फिर सेवा को पुनरारंभ करने के लिए चला जाता है।
हमने जो किया है: हमने सर्वर से नेटवर्क और नेटवर्क कनेक्शन की जांच की है और कोई समस्या नहीं है। सीपीयू उपयोग f.eks से इस समय के दौरान कुछ हद तक ऊपर चला जाता है। 30% औसत 40-50% औसत। हमने मेमोरी डंप लिया है और कोड में कोई लॉजिकल लॉक नहीं है जो उपयोगकर्ताओं को अवरुद्ध करता है और बहुत अधिक गतिविधि नहीं करता है। हमारा नवीनतम नेतृत्व कचरा कलेक्टर है। पेर्फॉन में हम देख सकते हैं कि "जीसी में% समय" लगातार 90% से अधिक है, (9 0-97%) और संग्रह गणना बढ़ जाती है। जीसी 0 और जीसी 1 दोनों। हमें संदेह है कि एक अवरुद्ध जीसी 2 भी चल रहा है, लेकिन हमें उत्पादन में पुन: प्रारंभ करना पड़ा क्योंकि यह उत्पादन में है इसलिए यह 5 मिनट की खिड़की के दौरान गिनती नहीं हुई थी जिसे हम परफमन चलाते थे। मेमोरी उपयोग 7,6 जीबी था। नोट: बकाया बढ़ता है इसलिए कॉल वहां जाती है लेकिन सेवा उन्हें संभाल नहीं देती है।
मेरे प्रश्न हैं, क्या कचरा कलेक्टर एक ऐसे राज्य में हो सकता है जहां यह लगातार 15 मिनट से अधिक समय तक चलता है और ब्लॉक करता है? या समस्या शायद किसी अन्य मुद्दे से संबंधित हैं?
हमारी सेवा वर्कस्टेशन मोड और विलंबता मोड में जीसी चलाती है: इंटरएक्टिव हमने अब इसे सर्वर और सस्टेन लोलाटाेंसी में बदल दिया है और उम्मीद है कि इससे कुछ हद तक मदद मिलेगी। क्या कचरा कलेक्टर अगर हम कुछ और कर सकते हैं?
संपादित करें: बड़ी मेमोरी उपयोग डिज़ाइन द्वारा है, कैश में डेटा इतना बड़ा है और वहां बहुत अधिक स्मृति उपलब्ध है।
स्मृति के उच्च उपयोग के मूल कारण को जानने के लिए सुझाव दें ... उदा। उस ऑब्जेक्ट का उपयोग करके समाप्त होने के बाद "मेमोरी" ब्लॉक को मुफ्त मेमोरी में जोड़ने का प्रयास करें – User2012384
जिज्ञासा से बाहर, आपके पास कितने धागे हैं? कार्य प्रबंधक में जांचें। कम से कम कुछ साल पहले एक समस्या थी कि आपके पास जितने अधिक धागे थे (यहां तक कि निष्क्रिय भी), धीमी गति से जीसी – xanatos
"क्या कचरा कलेक्टर एक ऐसे राज्य में हो सकता है जहां यह लगातार 15 मिनट से अधिक समय तक चलता है और ब्लॉक करता है"? बिल्कुल, अगर इसे लगातार स्मृति मुक्त करने की आवश्यकता होती है लेकिन ऐसा करने में असमर्थ है क्योंकि आप इसे पकड़ते रहते हैं। जैसा कि रेमंड चेन ने कहा, "एक बुरी नीति वाला कैश मेमोरी लीक के लिए एक और नाम है"। –