2013-10-03 4 views
21

मैं एक लंबे समय से चल .NET 4.5 अनुप्रयोग है कि बेतरतीब ढंग से दुर्घटनाओं, संदेश मैं ईवेंट लॉग में सवाल शीर्षक में उल्लेख किया है छोड़ने है । यह मुद्दा 3 अलग-अलग मशीनों और 2 अलग-अलग प्रणालियों (2008 आर 2 और 2012) पर पुन: उत्पन्न किया गया है। एप्लिकेशन किसी भी असुरक्षित/अप्रबंधित घटकों का उपयोग नहीं करता है, यह शुद्ध प्रबंधित .NET है, सीएलआर स्वयं ही एकमात्र अप्रबंधित चीज़ है।.NET 4.5: .NET रनटाइम में आंतरिक त्रुटि (80,131,506)/अक्षम करने समवर्ती जीसी

यहाँ दुर्घटना स्थल कि मैं डंप से निकाला है की स्टैक ट्रेस है:

clr.dll!MethodTable::GetCanonicalMethodTable() 
clr.dll!SVR::CFinalize::ScanForFinalization() - 0x1a31b bytes 
clr.dll!SVR::gc_heap::mark_phase() + 0x328 bytes 
clr.dll!SVR::gc_heap::gc1() + 0x95 bytes 
clr.dll!SVR::gc_heap::garbage_collect() + 0x16e bytes 
clr.dll!SVR::gc_heap::gc_thread_function() + 0x3e bytes  
clr.dll!SVR::gc_heap::gc_thread_stub() + 0x77 bytes  
kernel32.dll!BaseThreadInitThunk() + 0x1a bytes  
ntdll.dll!RtlUserThreadStart() + 0x21 bytes  

यह समस्या बारीकी से एक है कि here चर्चा की गई जैसा दिखता है, तो मैं समाधान है कि विषय में सुझाव दिया कोशिश की, लेकिन उनमें से कोई भी मदद की:

  • मैं this हॉटफिक्स को स्थापित करने की कोशिश की है, लेकिन यह मेरी मशीनों में से किसी पर स्थापित नहीं होगा (KB2640103 लागू नहीं होता है, या आपके कंप्यूटर पर एक और शर्त द्वारा अवरुद्ध है), जो वास्तव में समझ में आता है, हो क्योंकि मैं 4.5 का उपयोग कर रहा हूं, 4.0 नहीं।

  • मैं समवर्ती जीसी अक्षम करने की कोशिश की है और/या सर्वर जीसी सक्षम करने से। अभी मेरी app.config की प्रासंगिकता का इस तरह दिखता है:

    <?xml version="1.0"?> 
    <configuration>   
        <runtime> 
         <gcConcurrent enabled="false"/> 
         <gcServer enabled="true" /> 
        </runtime> 
    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> </startup></configuration> 
    

हालांकि अजीब बात मैं अभी भी प्रक्रिया डंप में कई जीसी संबंधित धागे लगता है।

ntdll.dll!NtWaitForSingleObject() + 0xa bytes 
KERNELBASE.dll!WaitForSingleObjectEx() + 0x9a bytes  
clr.dll!CLREventBase::WaitEx() + 0x13f bytes 
clr.dll!CLREventBase::WaitEx() + 0xf7 bytes  
clr.dll!CLREventBase::WaitEx() + 0x78 bytes  
clr.dll!SVR::t_join::join() + 0xd8 bytes 
clr.dll!SVR::gc_heap::scan_dependent_handles() + 0x65 bytes  
clr.dll!SVR::gc_heap::mark_phase() + 0x347 bytes 
clr.dll!SVR::gc_heap::gc1() + 0x95 bytes 
clr.dll!SVR::gc_heap::garbage_collect() + 0x16e bytes 
clr.dll!SVR::gc_heap::gc_thread_function() + 0x3e bytes  
clr.dll!SVR::gc_heap::gc_thread_stub() + 0x77 bytes  
kernel32.dll!BaseThreadInitThunk() + 0x1a bytes  
ntdll.dll!RtlUserThreadStart() + 0x21 bytes  

कौन सा अगर मैं किसी भी तरह समवर्ती जीसी अक्षम करने अप पेंच सकता है मुझे सोच बनाता है (कि क्या मैं वास्तव में के लिए config सूचीबद्ध है): एक दुर्घटना में होता है के अलावा, वहाँ निम्नलिखित स्टैक ट्रेस के साथ 7 धागे हैं।

मुझे लगता है कि ऊपर लपेटता है जो मैं अब तक पता लगाने के लिए प्रबंधित किया है लगता है। मैं वास्तव में इस मुद्दे से निपटने के तरीके के बारे में कुछ मदद का उपयोग कर सकता हूं।

+4

जीसी ढेर पर एक प्रबंधित ऑब्जेक्ट का ऑब्जेक्ट हेडर दूषित हो गया है, इसे अब प्रकार की विधि तालिका नहीं मिल रही है। आप हमेशा अनपेक्षित कोड की तलाश करते हैं जिसे आप देखने के लिए इंटरऑप करते हैं एक कारण के लिए। जीसी कॉन्फ़िगरेशन के साथ टंकण करने से समस्या ठीक नहीं होती है। –

+0

शायद फाइनल में कोई समस्या हो सकती है? आप अंतिमकर्ताओं में ब्रेकपॉइंट्स सेट करने या उन्हें टिप्पणी करने का प्रयास कर सकते हैं। – DSway

+0

'scan_dependent_handles': निर्भर हैंडल हाल ही में सीएलआर में जोड़े गए थे (4.0?)। शायद यह सीएलआर में एक वास्तविक बग है। – usr

उत्तर

3

मैं अपने आवेदन में अपने पिछले अनुभव से ड्राइंग कर रहा हूँ। यह तब हो सकता है जब अंतिम अपवाद स्तर तक कोई अपवाद अनचाहे हो जाता है, और यदि यह जाता है ... यह एप्लिकेशन को क्रैश कर देगा।

जीसी विन्यास पर कुछ भी करने से पहले ..

एक त्वरित जांच ... आप कार्य समानांतर पुस्तकालयों का उपयोग कर रहे हैं?। यदि हाँ वाकई अपवाद संभाल रहे हैं ठीक से बनाते हैं। यदि विभिन्न धागे से अपवादों को अनचाहे छोड़ दिया जाता है तो यह अंतिमकर्ता तक जाता है जो तब एप्लिकेशन को क्रैश करता है। उन्हें अच्छी तरह से संभालने के कुछ तरीके हैं। 'कुल' अपवाद को संभालना एक तरीका है (जिसे हम हल करने के लिए उपयोग करते थे!)।

http://msdn.microsoft.com/en-us/library/dd537614.aspx

मैं, एक टिप्पणी जोड़ने के 50 अंक की जरूरत नहीं है तो एक जवाब के रूप में जोड़ने ...

+0

समस्या वास्तव में तब शुरू हुई जब मैंने एक घटक सक्षम किया है जो टीपीएल का सक्रिय रूप से उपयोग कर रहा है, लेकिन मुझे नहीं लगता कि अनचाहे अपवाद यहां गलती हैं। कारण हैं: 1. कार्यों पर निष्पादित सभी कॉलबैक प्रयास-पकड़ ब्लॉक में लपेटे गए हैं; 2. मैंने AppDomain.Current.UnhandledException की सदस्यता ली है, और AFAIR यह इस कार्य अपवाद + फ़ाइनलाइज़र केस में ट्रिगर हुआ है; 3. मुझे नहीं लगता कि यह संभवतः एक प्रबंधित ढेर को कैसे भ्रष्ट कर सकता है, जो ऐसा लगता है कि यहां क्या हो रहा है। – HellBrick

+0

1) क्या आप AppDomain.Current.UnhandledException को ट्रिगर कर रहे हैं? इसका मतलब है कि कुछ अनचाहे छोड़ दिया गया है, लॉग इन करें और यहां अधिक डेटा प्राप्त करें। 2) फाइनेंजर पर अपवाद घातक हैं। 3) अपने डंप विश्लेषण 'थ्रेड' में और फाइनलज़र थ्रेड के लिए जांचें और! पे अपवाद को देखना चाहिए। अगर ऐसा है :) .. मुझे बताएं .. – SridharVenkat

+0

मेरा मतलब है कि मेरे पास एक AppDomain.Current.UnhandledException हैंडलर है, लेकिन यह मेरे ऐप में ट्रिगर नहीं हुआ है, भले ही यह एक साधारण अंतिमकर्ता अपवाद था (I मैंने निम्न परीक्षण ऐप द्वारा इसे दोबारा जांच लिया है: [http://pastebin.com/9EgzBZQA](http://pastebin.com/9EgzBZQA))। या किसी अन्य तरीके से प्रचारित अनचाहे कार्य अपवाद हैं जिनमें उन्हें अंतिमकर्ता से फेंकना शामिल नहीं है? डंप एक्सप्लोरेशन सुझावों के बारे में: मैं उन्हें बाद में कोशिश करूंगा, सबसे पहले मुझे शोध करने की ज़रूरत है कि आपने उनके द्वारा क्या मतलब किया है =) (यह पूरी डंप चीज मेरे लिए नई है) – HellBrick

0

समाधान है कि मुझे मदद की: स्थापना रद्द करें .NET 4.5.1 स्थापित 4.0 , निर्दिष्ट हॉटफिक्स स्थापित करें, 4.5.1 वापस स्थापित करें।

0

मैं सिर्फ माइक्रोसॉफ्ट के साथ एक बातचीत समाप्त हो गया के बाद से मैं एक मुद्दा है जो इसी तरह की है पुन: पेश करने में सक्षम है।

मेरे मामले में यह .NET रनटाइम में एक बग था, जिसे गतिशील प्रकार और गैर गतिशील कोड मिश्रण के साथ करना है। मुझे यकीन है कि अगर यह भी अपने परिदृश्य में मामला है नहीं कर रहा हूँ, लेकिन कुछ बात करने की कोशिश करना चाहते हो सकता है देखते हैं:

  • Windows 8.1 (नवीनतम अद्यतन) पर कोड चलाएँ। जाहिर है विंडोज 8.1 में विंडोज के अन्य संस्करणों की तुलना में .NET का एक नवीनतम संस्करण है।
  • यदि आप असेंबलीबिल्डर (जैसे मैंने किया) का उपयोग करते हैं, तो RunAndCollect के बजाय इसे Run मोड में बदलने का प्रयास करें।
  • बदलें x86 या x64 और फिर से कोशिश क्रम; आप समवर्ती जीसी सेटिंग्स के साथ भी गड़बड़ कर सकते हैं जैसे आपने पहले ही कोशिश की है। के रूप में हम बात
  • मेरे बग को ठीक किया जा रहा है, जो मूल रूप से मतलब है एक Windows अद्यतन है कि यह का ध्यान रखा वहाँ हो जाएगा। शायद यह भी इसके लिए इंतजार करने का एक विकल्प है; मुझे उम्मीद नहीं है कि बहुत लंबा समय लगेगा, क्योंकि यह कई कार्यक्रमों के लिए काफी महत्वपूर्ण है।
0

मुझे अंततः एक फिक्स मिला जिसे मैं इंस्टॉल कर सकता था। मेरे पास 4.5 है और 4.0 के लिए अन्य फिक्स स्थापित नहीं किया जा रहा था। 4.5 को हटाने से इसे ठीक नहीं किया गया। वास्तव में तय लिंक में फिक्स।

http://kb.machsol.com/Knowledgebase/Article/50305

0

मुझे पता है यह एक पुरानी पोस्ट है, तथापि, मैं ओ पी के रूप में ही इस मुद्दे में भाग है। बिंदु atlaste बनाया:

बदलें x86 या x64 और फिर से कोशिश क्रम; आप समवर्ती जीसी सेटिंग्स के साथ भी गड़बड़ कर सकते हैं जैसे आपने पहले ही कोशिश की है।

मेरे लिए कुंजी थी। अपनी परियोजनाओं के सभी करने के लिए एक (संयोग से आवेदन जो एक कंसोल आवेदन परियोजना है के लिए प्रवेश बिंदु) के अलावा कोई भी सीपीयू निर्धारित किया गया। यह प्रोजेक्ट x86 पर सेट किया गया था। एक बार जब मैंने इसे में बदल दिया तो कोई भी CPU एप्लिकेशन सही ढंग से चलाया गया।

0

हमें हमारे .NET 4.5 डेस्कटॉप ऐप - वेब स्क्रैपर में एक ही समस्या है। यह भारी भार के तहत यादृच्छिक रूप से दुर्घटनाग्रस्त हो गया। तो हम कुछ महीनों के लिए क्या कारण था यह जानने के तरीकों की खोज कर रहे हैं: हमने सब कुछ करने की कोशिश की है! समवर्ती जीसी को अक्षम करना, सर्वर मोड और कई अन्य कामकाजों को सेट करना, जब तक हमें एहसास न हो कि फ़ैंटॉमजेएस मॉड्यूल के कारण क्रैश हुआ। यह कुछ अप्रबंधित संसाधनों का उपयोग करता है और बाद में :(उन्हें स्पष्ट नहीं है तो हम PhantomJS एकीकरण के लिए एक स्टैंड-अलोन सांत्वना अनुप्रयोग बना लिया है। अब हम बाहर वेब स्क्रेपर से Process.Start के साथ इस कंसोल अनुप्रयोग पर अमल और बाद में मार डालते हैं। यह अधिक समय लगता है स्क्रैपिंग के लिए, लेकिन कोई और दुर्घटनाग्रस्त नहीं!