Uygulama ".NET Çalışma Zamanında Dahili Hata" İle Çöküyor


112

NET 4.0'a karşı yazılmış ve hafta sonu çökerek aşağıdaki mesajı olay günlüğüne koyan bir uygulamamız var:

Uygulama: PnrRetrieverService.exe Çerçeve Sürümü: v4.0.30319
Açıklama: İşlem, 80131506 çıkış kodlu IP 791F9AAA'da (79140000) .NET Çalışma Zamanı'ndaki bir dahili hata nedeniyle sonlandırıldı.

Bu, Windows Server 2003 R2 Standard Edition kutusundadır. Googling bu hatayla ilgili bir şey ortaya çıkmadı. Örneğin, bu VS Studio'da değil, bunun yerine bir üretim kutusunda gerçekleşiyor; hizmet sonunda yeniden başlatıldığında başka sorun yaşamadı.

.NET Runtime'da bir hatayı tanılamaya nasıl başlanır?


1
Bu hata ilk kez meydana geliyorsa, son birkaç günden bir haftaya kadar değişen herhangi bir şeye bakardım.
Tony Abrams

Yanıtlar:


121

80131506 çıkış kodu ile

Bu çok kötü bir durum, ExecutionEngineException. .NET 4.0'dan başlayarak, bu özel durum programı hemen sonlandırır. Genel neden, toplanan çöp yığınının durumunun bozulmasıdır. Bu da her zaman yönetilmeyen koddan kaynaklanır. Bu istisnanın ortaya çıktığı koddaki kesin konum yararlı değildir, bozulma genellikle hasar tespit edilmeden önce meydana gelir.

Bunun kesin sebebini bulmak zor olacak. Hizmetinizin kullanıyor olabileceği tüm yönetilmeyen kodları inceleyin. Belirgin bir aday yoksa çevre sorunlarından şüphelenmek, kötü niyetli kötü amaçlı yazılım tarayıcıları kötü şöhretlidir. Çok kötü bir şekilde tekrar ederse, yumuşak RAM hataları gibi donanım sorunlarından şüphelenin.


3
Yığını bozan, ntdll.dll ve .NET çalışma zamanı hatalarına neden olan SQL CE 3.5 ile ilgili sorunlar yaşadım .
Phil

4
CorError.h
Hans Passant

2
CorError.h'de listelendiklerini nasıl anladınız?
Yeonho

6
80131506 gibi onaltılık hata kodlarının ne anlama geldiğini ve hangi başlık dosyasının bunları içerdiğini öğrenmek için bu Err.exe aracını microsoft.com/en-au/download/details.aspx?id=985 kullanın .
Jeremy Thompson

2
@HansPassant Sanırım amaçlanan soru 'dünyada var olan tüm dosyalar için CorError.h'nin bakmaya değer bir dosya olduğunu nasıl bildin?
bacar

41

X64 .Net 4'te Garbage Collection'ın eşzamanlı uygulamasındaki bir hata , aşağıdaki microsoft KB girişinde belirtildiği gibi buna neden olabilir:

ExecutionEngineException, Çöp Toplama sırasında oluşur

Çöp toplama işlemi sırasında sorunun oluştuğundan emin olmak için önce derin bir mini döküm araştırması yapmalısınız.

Mini döküm konumu, genellikle kilitlenme girdisinin ardından olay günlüğündeki bir Windows Hata Bildirimi girişinde bulunabilir. O halde WinDbg ile eğlenin!

Kullanımı ile ilgili en son belgeler <gcConcurrent/>devre dışı eşzamanlı veya arka plan çöp toplama (.NET 4 ve üstü) için yapılandırma elemanı, bulunabilir burada .


bu yorum için teşekkürler - bu uzun zamandır yaşadığım bir sorunun çözümüydü!
lenniep

1
Sen bir hayat kurtarıcısın, bu bizim için sorun oldu. Bir yana, mini döküm dosyasını Visual Studio'da açabilir, gerekirse sembol yollarını ayarlayabilir ve ardından hata ayıklayabilirsiniz. Bu bize, hatanın clr.dll! WKS :: gc_heap :: mark_object_simple () konumunda meydana geldiğini söyledi. Eminim WinDbg çok güçlüdür, ancak VS'yi kullanmak, hatanın kaynağını doğruluyorsanız size yeterince söyleyebilir.
Tim

Uygulama çöktü ancak C: \ Temp \ CrashDump klasöründe herhangi bir mini döküm bulamadım. Orada başka çökme dökümleri var ve günler önceki kazaların çöplüklerini bulabiliriz. Neden çökme dökümü olmadığını biliyor musunuz? Hata mesajı ve çıkış kodu tamamen aynıdır.
Jeffrey Zhao

Tam olarak aradığım şey buydu ... uygulama çökme olayı bir talimat işaretçisi içeriyordu, bu da bir döküm olmadan benim için işe yaramazdı. Daha sonraki olaylara bakmayı asla düşünmedim. Teşekkür ederim!
laindir

1
Aynı durumdaki diğerleri için, Windows Hata Raporlama'yı kilitlenme durumunda tam bir yığın dökümü yapacak şekilde yapılandırmak yararlı olabilir: msdn.microsoft.com/en-us/library/windows/desktop/…
laindir

9

.NET çalışma zamanında, kodumdaki hatalardan kaynaklandığı ortaya çıkan "dahili hatalar" yaşadım; .NET çalışma zamanında "dahili bir hata" olduğu için, kodunuzda temel neden olarak bir hata olmadığını düşünmeyin. Başkasını suçlamadan önce daima kendi kodunuzu suçlayın.

Nereden bakmaya başlayacağınızı veya çökmeden önce sistemin durumunu tekrarlayabileceğinizi gösteren günlük kaydı ve istisna / yığın izleme bilgilerine sahip olduğunuzu umuyoruz.



5

Yıllarca bir dizi uygulamada bu sorunla boğuştuktan sonra, Microsoft'un sonunda bunu .NET 4 CLR'de buna neden olan bir hata olarak kabul ettiği anlaşılıyor. http://support.microsoft.com/kb/2640103 .

Daha önce, Think Before Coding tarafından bağlantısı verilen Microsoft makalesinde açıklandığı gibi, çöp toplayıcıyı sunucu modunda çalışmaya zorlayarak (app.config'de gcServer etkin = "true") sorunu "düzeltiyordum". Bu, özünde uygulamadaki tüm iş parçacıklarını, toplama sırasında duraklamaya zorlar ve GC tarafından işlenen belleğe erişen diğer iş parçacıklarının olasılığı ortadan kaldırılır. Yıllarca boşuna kodumda veya diğer üçüncü taraf yönetilmeyen kitaplıklarda bir "hata" aradığımı bulduğum için mutluyum, çünkü hata benim değil Microsoft'un kodunda yatıyordu.


1
Aldığınız HotFix dosyalarının sürüm numarası nedir? KB'de listelenen sürüm numarası 4.0.30319.526'dır ancak benim zaten 4.0.30319.18052'ye sahibim. HotFix hala gerekli mi veya bir Windows Güncellemesine eklendi mi?
otomatikleştir

1
HotFix exe'yi çalıştırdığımda "KB2640103 geçerli değil veya bilgisayarınızdaki başka bir koşul tarafından engellendi."
otomatikleştir


3

NET 4 kodumun en son sürümüyle WinXP kutusunda aynı hatayı aldım. Önceki yapılar kontrol edildi - şimdi onlar da çöküyor! Tamam, yani ben değilim :). Burada / yukarıda hiçbir öneri yardımcı olmadı.

Aynı sorunun çok daha yakın tarihli (2018-05-09) raporu: 80131506 çıkış koduyla Application Crash .

C : Benzer bir hata alıyorduk, ancak bizimkinin Citrix bellek iyileştiricisinden kaynaklandığına inanıyoruz.
Çözüm, sorunun meydana geldiği ana bilgisayarlarda .Net çekirdek kitaplıklarının yeniden oluşturulmasını zorlamaktı:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe update /force

Kök neden hala bilinmiyor (makine güncellenmiyor ve çok az kullanılıyor), ama bu benim için yaptı !


2

Benim durumumda bu istisna, disk alanı bittiğinde ve .NET, Windows Sanal Belleğinde bellek ayıramadığında meydana geldi.

Olay günlüğünde şu hatayı gördüm:

Uygulama açılır penceresi: Windows - Sanal Bellek Minimum Çok Düşük: Sisteminiz sanal bellek yetersiz. Windows, sanal bellek disk belleği dosyanızın boyutunu artırıyor. Bu işlem sırasında, bazı uygulamalar için hafıza talepleri reddedilebilir.

Ve önceki hata:

C: diski doludur veya dolmak üzere. Bazı dosyaları silmeniz gerekebilir.


1

Benim durumumda sorun, içinde NtQuerySystemInformation çağrısının olduğu bir C ++ / CLI kitaplığıydı ; bazen bazı nedenlerden dolayı (ve gizemli koşullar altındaCLR olarak adlandırıldığında ) , CLR yığını bozuldu ve uygulama çöktü.

HeapCreate ile oluşturulan "özel bir yığın" kullanarak ve bu işlev tarafından kullanılan arabellekleri orada tahsis ederek sorunu çözdüm .


1

Herkese yardımcı olacağından emin değilim, ancak koşarak bunu aşabilirim

devenv.exe /ResetSettings 

...yolda {Visual_Studio_root}\Common7\Ide

Olay günlüğünde aşağıdaki hataları aldım ve VS sürekli olarak çöküyor ve yeniden başlatılıyordu:

Faulting application name: devenv.exe, version: 14.0.25123.0, time stamp: 0x56f22f32
Faulting module name: clr.dll, version: 4.7.2115.0, time stamp: 0x59af88f2
Exception code: 0xc0000005
Fault offset: 0x0015f90e
Faulting process id: 0x3a7c
Faulting application start time: 0x01d353463eaf0c36
Faulting application path: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Report Id: a232f984-6e80-4f61-9003-e18a035c8f93
Faulting package full name: 
Faulting package-relative application ID: 

Bu benim için de çalıştı. Bağlam: Orta büyüklükte bir çözümü (~ 25 proje) .NET Core SDK'ya dönüştürdüm, önü dönüşümden önce eski WAP'ın yerini alan neredeyse boş bir Web Uygulama Projesi idi. Görünüşe göre bazı kalıcı ayarlar, yeni projede IISExpress'in beklentileri ile çatışıyordu.
Tomas Aschan

1

Benim durumumda sorun, web.config dosyamdaki yinelenen bağlama yönlendirmelerinden kaynaklanıyordu. Daha fazla bilgi burada .

Bunun NuGet'in bağlama yönlendirmelerini değiştirmesinden kaynaklandığını varsayıyorum, ancak örneğin şöyle görünüyordu:

  <dependentAssembly>
    <assemblyIdentity name="Lucene.Net" publicKeyToken="85089178b9ac3181"/>
    <bindingRedirect oldVersion="0.0.0.0-2.9.4.0" newVersion="3.0.3.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Lucene.Net" publicKeyToken="85089178b9ac3181"/>
    <bindingRedirect oldVersion="0.0.0.0-2.9.4.0" newVersion="3.0.3.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0"/>
  </dependentAssembly>

Tüm kopyaları kaldırmak sorunu çözdü.


0

Benim durumumda bu hata, SAP Business One 9.1 uygulamasında oturum açarken meydana geldi. Windows olaylarında, OP tarafından bildirilene ek olarak başka bir hata olayı bulabilirim:

Nome dell'applicazione che ha generato l'errore: SAP Business One.exe, versione: 9.10.160.0, timestamp: 0x551ad316
Nome del modulo che ha generato l'errore: clr.dll, versione: 4.0.30319.34014, timestamp: 0x52e0b784
Codice eccezione: 0xc0000005
Offset errore 0x00029f55
ID processo che ha generato l'errore: 0x1d7c
Ora di avvio dell'applicazione che ha generato l'errore: 0x01d0e6f4fa626e78
Percorso dell'applicazione che ha generato l'errore: C:\Program Files (x86)\SAP\SAP Business One\SAP Business One.exe
Percorso del modulo che ha generato l'errore: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
ID segnalazione: 3fd8e0e7-52e8-11e5-827f-74d435a9d02c
Nome completo pacchetto che ha generato l'errore: 
ID applicazione relativo al pacchetto che ha generato l'errore: 

Makine, .NET Framework 4.0 yüklü ve 4.5 sürümü olmadan Windows 8.1 çalıştırır. İnternetten .NET 4'te de bir hata olabileceğini göründüğü için .NET Framework 4.5.2'yi kurmayı denedim ve sorunu çözdüm .


0

Çerçeve Sürümü: v4.0.30319 Açıklama: İşlenmeyen bir istisna nedeniyle işlem sonlandırıldı. Özel Durum Bilgisi: System.Reflection.TargetInvocationException

Bu Hata ile karşılaştım, Uygulama bazı PC'lerde ve yukarıdaki hatayı veren bazı PC'lerde iyi çalışıyordu. Framework 4.5'i kaldırdım ve yeniden yükledim, sorunumu çözdü.

Cheer.


0

Bu, sonlandırıcıda meydana gelen bir istisna olabilir. ~ Class () {Dispose (false); } yönetilmeyen bir kaynak olarak neyi elden çıkardığınızı kontrol edin. Sadece bir deneyin .. oraya bakın ve iyi olmalısınız.

Sorunu, günlükleri olmayan bu gizemli başarısızlığı yaşadığımız için bulduk. Bir "void Dispose (bool atma)" kullanarak her zamanki önerilen modeli yaptık.

Sonlandırıcıyla ilgili bu sorunun yanıtlarına baktığımızda, yönetilmeyen kaynakların elden çıkarılmasının bir istisna oluşturabileceği olası bir yer bulduk.

Bir yerde, nesneyi düzgün bir şekilde elden çıkarmadığımız ortaya çıktı, bu nedenle sonlandırıcı, yönetilmeyen kaynakların diposalını devraldı ve bir istisna oluştuğunu gördü.

Bu durumda, istemciyi Kafka'dan temizlemek için Kafka Rest API kullanılıyordu. Görünüşe göre bir noktada istisna attı, sonra bu sorun meydana geldi.



0

Bunun benim için neden olduğunu asla anlayamadım. Uygulamalarımdan biri için sürekli olarak yeniden üretilebilirdi, ancak yeniden başlatıldıktan sonra ortadan kayboldu.

Windows 2004 Build 19582.1001'i (Insider Preview) .net-4.8 ile çalıştırıyorum ve bunun bir donanım bellek hatası gibi bir şeyden kaynaklanması durumunda da şaşırmam. Ayrıca, uygulamam bazı yönetilmeyen kodları yükler ve başlatır, bu nedenle çökmenin bundan kaynaklanmadığını kanıtlayamıyorum.


-1

Her 5-10 dakikada bir uygulama havuzum bu çıkış koduyla çökmeye devam ediyordu. Çöp Toplayıcıya olan güveninizi mahvetmek istemiyorum ama aşağıdaki çözüm benim için çalıştı.

GC.GetTotalMemory(true)Her dakika arayan bir İş ekledim .

Sanırım, bazı nedenlerden ötürü, GC kullandığım çok sayıda tek kullanımlık nesne için belleği otomatik olarak yeterince sık denetlemiyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.