2013-06-20 11 views
5

के साथ उच्च CPU और लंबे प्रतिक्रिया समय समस्याओं का पता लगाने के लिए हम HAProxy के पीछे 3 सर्वर पर Asp.Net WebApi चला रहे हैं। HAProxy बस इन 3 उदाहरणों के बीच यादृच्छिक रूप से अनुरोध वितरित करता है।एएसपी.नेट वेब एपी

ये उदाहरण मोंगोडब, रेडिस और कुछ विंडोज सेवाओं से जुड़ते हैं।

आम तौर पर, w3wp.exe% के बारे में प्रत्येक API सर्वर पर 30 सीपीयू उपयोग करता है।

समय-समय पर (एक घंटे में कई बार) API सर्वरों में से एक सीपीयू की उच्च मात्रा उपयोग करने का निर्णय। इस व्यवहार के साथ सहसंबंध में, हम प्रतिक्रिया प्रतिक्रिया समय देखना शुरू कर देते हैं। संख्याएं बढ़ती रहती हैं जब तक हैप्रोक्सी 10000ms प्रतिक्रिया समय नहीं देखता है और अन्य दो सर्वरों के अनुरोधों को रूट करने का निर्णय लेता है। ये सब 10-20 सेकंड में होते हैं। थोड़ी देर बाद, यह सर्वर वापस अपने सामान्य स्थिति में जाता है और फिर से अनुरोध करना शुरू कर देता है। कुछ मिनटों के बाद, एक और सर्वर बिल्कुल वही काम करता है। यह आगे बढ़ता रहता है।

हम न्यू अवशेष का उपयोग कर रहे लेकिन जब से आवेदन एक WebAPI अनुप्रयोग है, हम किसी भी उपयोगी जानकारी नहीं मिलती है। हम सीपीयू उपयोग, मेमोरी उपयोग, नेटवर्क यातायात और आई/ओ के लिए हमारे सभी सर्वरों (रेडिस, मोंगो और विंडोज़ सेवाओं) की निगरानी करते हैं लेकिन हम उपरोक्त आबादी के दौरान कोई महत्वपूर्ण भार नहीं देखते हैं।

हम इस एप्लिकेशन व्यवहार के पीछे कारण का पता कैसे लगा सकते हैं?

+0

क्या आपने इस मुद्दे को हल किया? मुझे वेब एपीआई के साथ एक ही समस्या है। कुछ कॉल के लिए, उपयोगकर्ता को कोई प्रतिक्रिया नहीं मिलती है और w3wp.exe को उच्च मेमोरी उपयोग मिल रहा है। क्या आप साझा कर सकते हैं कि आपने अपनी समस्या की जांच कैसे की? –

उत्तर

0

एक अच्छा विकल्प WinDBG या अन्यथा के साथ एक मिनी डंप प्रोसेस एक्सप्लोरर की तरह कुछ का उपयोग कर लेने के लिए और उसके बाद का निरीक्षण यह देखने के लिए धागे क्या कर रहे हैं और बहुत आगे होगा।

http://www.haneycodes.net/but-it-didnt-happen-in-dev-or-qa/

0

DavidH के रूप में कहा है, हो रही एक स्मृति डम्प एक बहुत ही महत्वपूर्ण कदम है: मैं इसे यहाँ कैसे करना है के बारे में एक अच्छा ब्लॉग पोस्ट की है। यदि आप चाहते हैं, तो मैं डंप पढ़ने में मदद कर सकता हूं।

एक और उपयोगी भी है सीपीयू विश्लेषक जो मुक्त है: http://samsaffron.com/archive/2009/11/11/Diagnosing+runaway+CPU+in+a+Net+production+application

एक अन्य विकल्प PerfView उपयोग करने के लिए है।

फिर भी एक और विकल्प जेटब्रेन्स dotTrace का उपयोग करें और w3wp.exe प्रक्रिया को संलग्न करने के लिए है।

0

एक बात नेट और जावा ईई के बीच साझा कचरा कलेक्टर है। इसलिए, यदि आपका एप्लिकेशन बड़ी मात्रा में मेमोरी का उपयोग करता है तो उच्च CPU की अवधि कचरा कलेक्टर आ सकती है। मुझे यह समस्या थी। नेट 3.5 आईआईएस 7 एक ऐसा एप्लीकेशन चला रहा था जो लगातार प्रति गीगाबाइट पर इस्तेमाल होता था। कचरा कलेक्टर मूल रूप से सब कुछ बंद कर देता है जबकि यह आपके आवेदन के लिए स्मृति पुनर्प्राप्त कर रहा है। आप कचरा कलेक्टर को ट्विक कर सकते हैं और इसे समझने पर भी इसे अपने कोड से कॉल कर सकते हैं। आप बहुत सी रणनीतियां उपयोग कर सकते हैं। यदि आप बहुत कुछ कर रहे हैं और बहुत सारी स्ट्रिंग सामग्री कर रहे हैं तो एक और समस्या जीसी के साथ आ जाएगी। उदाहरण के लिए, आप एक सतत वेब सेवा के माध्यम से आने वाले चरित्र तारों को पार्स कर रहे हैं। इससे बहुत सारी स्मृति विखंडन हो जाती है और जीसी बहुत अधिक समय और सीपीयू को स्मृति पुनर्प्राप्त करने का कारण बन सकती है।

यह देखने में आसान है कि यह वास्तव में क्या हो रहा है। आप प्रक्रिया के स्मृति उपयोग और सीपीयू को देखने के लिए कार्य प्रबंधक का उपयोग कर सकते हैं। जब सीपीयू ऊपर जाता है और उसके बाद फिर से चला जाता है तो स्मृति का उपयोग करें।

+0

एप्लिकेशन बहुत कम स्मृति का उपयोग करता है क्योंकि यह किसी सत्र को संग्रहीत नहीं करता है और मेमोरी स्पेस लेने वाली एकमात्र चीज स्थानीय रूप से बनाई गई घटनाएं होती है। –

+0

इस तरह मेमोरी काम करता है। नेट यह है कि स्मृति कुछ समय तक पुनर्प्राप्त नहीं होती है जब तक कि जीसी एल्गोरिदम निर्धारित नहीं करता कि 'अब' एक अच्छा समय होगा। जीसी की आवृत्ति आपके द्वारा उपयोग की जाने वाली सेटिंग्स और आपके द्वारा उपयोग की जाने वाली दर और स्मृति को रिलीज़ करने के द्वारा निर्धारित की जाती है। सत्र चर में सामान भंडारण वास्तव में कोई फर्क नहीं पड़ता। उदाहरण के लिए, बहुत सारे तारों को पार्स करना कोई फर्क नहीं पड़ता क्योंकि आप स्मृति के छोटे हिस्से बना रहे हैं जिन्हें पुनः दावा और पुनः संयोजित किया जाना है; पार्सिंग स्ट्रिंग्स जीसीसी द्वारा चलाए जाने वाले समय की एक बड़ी सीपीयू उपयोग और एक प्रणाली जो उत्तरदायी नहीं है, को बढ़ाएगी। –

संबंधित मुद्दे