स्मृति को हर दिन लगभग उसी समय मुक्त किया गया


10

मेरे पास Windows Azure पर कुछ VMs हैं जो हमारी ईकॉमर्स वेबसाइट चलाते हैं, और हाल ही में हमने इन मशीनों पर नज़र रखने के लिए Telegraf, InfluxDb और Grafana का उपयोग करना शुरू किया। डेटा इकट्ठा करने के कुछ हफ़्ते बाद, मैंने मेमोरी उपलब्ध मीट्रिक से संबंधित एक अजीब पैटर्न पर ध्यान दिया है :

दिन की समान अवधि में लगभग हर दिन, मैंने देखा है कि स्मृति की अचानक मात्रा मुक्त हो रही है, जो मेरे बहुत ही सीमित DevOp कौशल के कारण, मैं यह पता नहीं लगा सकता कि यह क्या कारण है।

यहां एक चार्ट है जो इस पैटर्न को दिखाता है:

अजीब पैटर्न

मेरा सवाल है: क्या इस तरह से कुछ हो सकता है? मुझे लगता है कि एक मेमोरी लीक को दोष देने पर संदेह है, लेकिन ... मुफ्त मेमोरी 70% से नीचे कभी नहीं गिरती है और केवल दो वीएम में सबसे अधिक ट्रैफ़िक के साथ होता है!

जब मुझे कुछ ऐसा दिखाई दे तो क्या मुझे चिंतित होना चाहिए?

पुनश्च: मैंने निजी ई वर्चुअल बाइट्स के लिए मेट्रिक्स को इकट्ठा किया है, जो हमारे द्वारा चलाए जा रहे प्रत्येक विंडोज़ सेवाओं और w3wp प्रक्रिया के लिए है ... हालाँकि मैंने पढ़ा है कि यह मेट्रिक्स यह पता लगाने के लिए बहुत विश्वसनीय नहीं है कि क्या आपके पास मेमोरी लीक है, लेकिन कम से कम मैं किसी प्रकार की प्रवृत्ति प्राप्त करने की कोशिश करूंगा और यह देखूंगा कि क्या यह ऊपर दिखाए गए पैटर्न से संबंधित है।


2
आप एक सामान्य कचरा संग्रहकर्ता या IMHO सफाई कैश देख रहे हैं। विच भाषा में अपनी वेबसाइट किया है? (यह आपका ऐप हो सकता है, आपका वेबसर्वर, और यहां तक ​​कि कुछ सफाई करने वाला सिस्टम भी)
तेंसिबाई

यह कुछ ऐसा था जिस पर मुझे भी शक हो रहा था ... यह ASP.NET MVC 4 में किया गया है, इसलिए कचरा इकट्ठा करने का सिद्धांत कुछ समझ में आता है। इसके अलावा, एक तरफ ध्यान दें, मी मेट्रिक्स मैं w3wp प्रक्रिया और विंडोज़ सेवा पर इकट्ठा हो रहा हूं, बिल्कुल सामान्य लग रहा है।
एंटोनियो सेर्जियो सिमेस

मुझे एएसपी में लगभग कुछ भी नहीं पता है, लेकिन मुझे लगता है कि जावा के रूप में मेमोरी खपत और कचरा संग्रह को ग्राफ़ करने का तरीका है, यह सुनिश्चित करने में मदद करना चाहिए कि यह मूल कारण है।
तेनसीबाई

जवाबों:


7

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

एक स्मृति रिसाव आम तौर पर चौखटे कि स्मृति प्रबंधन की कमी है, या एक कार्यक्रम में एक स्मृति से प्रबंधित रूपरेखा है कि अधिभावी या कचरा कलेक्टर भ्रामक पर पाया जाता है।

यह तथ्य कि ये आपके उच्चतम-ट्रैफ़िक सर्वर हैं, समझ में आता है। आप देख रहे हैं। .NET फ्रेमवर्क आवश्यकतानुसार मेमोरी आवंटित करता है, फिर कचरा कलेक्टर एक नियमित चक्र पर किक करता है और कचरा संग्रह एल्गोरिदम का उपयोग करके अप्रयुक्त मेमोरी को पुनः प्राप्त करता है। जब तक आप विशिष्ट प्रदर्शन समस्याओं पर नज़र नहीं रखते हैं, मुझे नहीं लगता कि यह मेमोरी उपयोग पैटर्न एक समस्या है।


यह वास्तव में एक .NET ऐप है और पिछले कुछ दिनों में मेरे शोध से यह बहुत कुछ समझ में आता है कि आपने और @Tensibai ने क्या लिखा है।
एंटोनियो सेर्जियो सिमेस

7

मुझे लगता है कि यह पता चला है कि यह ग्राफ़ ऐसा क्यों दिखता है।

मैं ASP.NET Application / Errors कुल प्रदर्शन काउंटर के लिए मैट्रिक्स भी इकट्ठा कर रहा हूं, और मैंने देखा है कि ठीक उसी समय जब कोई मेमोरी उपलब्ध होती है, तो कुल त्रुटियाँ मीट्रिक 0 पर रीसेट हो जाती हैं।

Msdn के अनुसार, यह काउंटर 0 पर रीसेट होता है जब भी कोई एप्लिकेशन रिस्टार्ट / शटडाउन होता है।

यह मुझे विश्वास है कि इस स्मृति उपलब्ध sawtooth पैटर्न के लिए कारण अनुप्रयोग पुनरारंभ हो रहा है के कारण होता है।

यहां बताया गया है कि मेरे चार्ट कैसे दिखते हैं:

कुल ASP.NET अनुप्रयोग त्रुटियां मेमोरी सर्ज

अपडेट करें

ऐसा इसलिए होता है क्योंकि W3WP प्रक्रिया के निजी बाइट्स ने रीसायकल के लिए सीमा को मारा (हमारे पास एक निजी बाइट्स सीमा है जो ऐप पूल में कॉन्फ़िगर की गई है)। और निजी बाइट्स चार्ट को करीब से देखते हुए, हम देख सकते हैं कि कुछ असामान्य हो रहा है क्योंकि मेमोरी उपयोग 650 एमबी से 3.2 जीबी तक और कुछ घंटे बाद 3.6 जीबी से 16.6 जीबी तक छलांग लगाता है! यह तब होता है जब रीसायकल होता है।


2
यह बहुत अधिक प्रशंसनीय व्याख्या है। स्मृति मुक्त होना लगभग विशेष रूप से प्रक्रिया पुनरारंभ के साथ होता है। रनिंग प्रक्रियाओं की मुक्त स्मृति के लिए तंत्र कभी भी यह तेज नहीं होते हैं और शायद ही कभी प्रचारित ढेर पर कुछ जगह खाली करने के बजाय स्मृति को मुक्त करते हैं।
जिरी क्लौडा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.