2010-11-17 12 views
34

मेरे पास एक ऐसा एप्लिकेशन है जो प्रदर्शन काउंटर का उपयोग करता है, जिसने महीनों तक काम किया है। अब, मेरी देव मशीन और अन्य डेवलपर्स मशीन पर, जब मैं PerformanceCounterCategory.Exists को कॉल करता हूं तो यह लटकना शुरू कर दिया है। जहां तक ​​मैं कह सकता हूं, यह अनिश्चित काल तक लटका है। इससे कोई फर्क नहीं पड़ता कि मैं किस श्रेणी में इनपुट के रूप में उपयोग करता हूं, और एपीआई का उपयोग करने वाले अन्य अनुप्रयोग एक ही व्यवहार को प्रदर्शित करते हैं।PerformanceCounterCategory.Exists अनिश्चित काल तक लटकाएंगे?

डीबगिंग (एमएस सिंबल सर्वर का उपयोग करके) ने दिखाया है कि यह माइक्रोसॉफ्ट.Win32.RegistryKey के लिए एक कॉल है जो लटकता है। आगे की जांच से पता चलता है कि यह इस लाइन है कि लटकी हुई है:

while (Win32Native.ERROR_MORE_DATA == (r = Win32Native.RegQueryValueEx(hkey, name, null, ref type, blob, ref sizeInput))) { 

यह मूल रूप से एक पाश प्रदर्शन काउंटर डेटा के लिए पर्याप्त स्मृति आवंटित करने के लिए कोशिश करता है। यह size = 65000 से शुरू होता है और कुछ पुनरावृत्तियों करता है। चौथी कॉल में, जब size = 520000, Win32Native.RegQueryValueEx लटकता है।

// Win32 RegQueryValueEx for perf data could deadlock (for a Mutex) up to 2mins in some 
    // scenarios before they detect it and exit gracefully. In the mean time, ERROR_BUSY, 
    // ERROR_NOT_READY etc can be seen by other concurrent calls (which is the reason for the 
    // wait loop and switch case below). We want to wait most certainly more than a 2min window. 
    // The curent wait time of up to 10mins takes care of the known stress deadlock issues. In most 
    // cases we wouldn't wait for more than 2mins anyways but in worst cases how much ever time 
    // we wait may not be sufficient if the Win32 code keeps running into this deadlock again 
    // and again. A condition very rare but possible in theory. We would get back to the user 
    // in this case with InvalidOperationException after the wait time expires. 

किसी को भी करने से पहले इस व्यवहार देखा है:

इसके अलावा, बल्कि worringly, मैं PerformanceCounterLib.GetData के लिए संदर्भ स्रोत में इस टिप्पणी को मिला? इसके समाधान के लिए क्या किया जा सकता है ?

+2

बहुत अच्छा शोध, +1। हां, आगे बढ़ें और चिंता करें, पूरे पेर्फ काउंटर एपीआई को अनजान अफवाह मिल गया। एक बहुत ही सरल मॉडल जिसे विंडोज के अगले संस्करण के शीर्ष पर बोल्ट नहीं किया जा सका। विस्टा ने इससे एक बड़ा ब्रेक बनाया। इसके साथ गुड लक! –

उत्तर

24

यह समस्या अब तय की गई है, और चूंकि यहां कोई जवाब नहीं है, इसलिए भविष्य में खोजों में प्रश्न मिलने पर मैं यहां एक उत्तर जोड़ूंगा।

अंततः प्रिंट स्पूलर सेवा (एक अस्थायी उपाय के रूप में) को रोककर मैंने इस त्रुटि को ठीक किया।

ऐसा लगता है कि प्रदर्शन काउंटरों को पढ़ने के लिए वास्तव में सिस्टम पर प्रिंटर को गिनने की आवश्यकता होती है (एक लटकती प्रक्रिया के विनडबग डंप द्वारा पुष्टि की गई है, जहां मैं स्टैक ट्रेस में देख सकता हूं कि विंसपूल प्रिंटर की गणना कर रहा है, और इसमें फंस गया है एक नेटवर्क कॉल)। यह वास्तव में सिस्टम पर असफल रहा था (और यकीन है कि "उपकरण और प्रिंटर" विंडो खोलने के लिए भी पर्याप्त है)। यह मुझे परेशान करता है कि एक प्रिंटर/नेटवर्क समस्या वास्तव में प्रदर्शन काउंटर नीचे जा सकती है। कोई ऐसा सोचता है कि इस तरह के मामले में कुछ प्रकार के असफल-सुरक्षित बनाए गए थे।

मैं अनुमान लगा रहा हूं, यह नेटवर्क पर खराब प्रिंटर/ड्राइवर द्वारा कारण है। मैंने अभी तक प्रभावित सिस्टम पर प्रिंटिंग को फिर से सक्षम नहीं किया है, क्योंकि हम खराब प्रिंटर की तलाश में हैं।

+1

क्या यह संभव है कि प्रदर्शन काउंटरों का पठन * प्रिंट स्पूलर को लटकने का कारण बनता है? कुछ संसाधनों के लिए एक दूसरा अनुरोध फायर करना जो पहले अनुरोध को खत्म करने की आवश्यकता है, या कुछ? मुझे लगता है कि यह वास्तविक कारण नहीं बदलता है - एक खराब चालक - लेकिन मुझे आश्चर्य होगा कि समस्या तब तक दिखाई नहीं देगी जब तक आप इसे पहले से विस्तृत तरीके से उत्तेजित नहीं करते। –

+1

इस उत्तर ने हमें एक संबंधित [नया प्रदर्शन काउंटर()] (http://stackoverflow.com/questions/2868068) समस्या ठीक करने में मदद की। पुराने प्रिंटर को हटाने से लटका रोका गया और कम से कम एक त्रुटि संदेश दिखाया गया जिसे हम पीछा कर रहे हैं। – crokusek

+0

मुझे Outlook एड-इन से एक समान समस्या का सामना करना पड़ रहा है। डीबग करने के लिए आपने किस टूल का उपयोग किया था? वर्तमान में मेरे पास प्रोसेस मॉनीटर है, लेकिन मुझे डेडलॉक –

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

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