.NET 4.5: Interner Fehler in der .NET Runtime (80131506) / gleichzeitige GC deaktivieren
Ich habe ein Dauerbrenner .NET 4.5-Anwendung stürzt ab, nach dem Zufallsprinzip, und die Nachricht, die ich erwähnt habe in der Frage-Titel in der event log. Das Problem ist reproduziert auf 3 verschiedenen Rechnern und 2 verschiedenen Systemen (2008 R2 und 2012). Anwendung nicht verwenden unsichere/nicht verwaltete Komponenten, die es rein geschafft .NET, nur mit dem nicht verwalteten Sache der CLR selbst.
Hier ist der stack-trace von der Absturzstelle habe ich extrahiert aus dem dump:
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
Diesem Thema eng ähnelt dem, was besprochen wurde hier, also versuchte ich die Lösungsvorschläge in diesem Thema, aber keiner von Ihnen geholfen:
- Habe ich versucht, die Installation von diese hotfix, aber es nicht installieren auf meinen Maschinen (KB2640103 nicht gilt, oder blockiert ist, durch eine andere Bedingung auf Ihrem computer), das macht eigentlich Sinn, denn ich bin mit 4.5, nicht 4.0.
- Ich habe versucht, das deaktivieren concurrent-GC und/oder die Aktivierung von server-GC. Jetzt den relevanten Teil meiner app.config sieht wie folgt aus:
<?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>
Aber die seltsame Sache ist ich finde immer noch mehrere GC-bezogenen threads in der dump-Prozess. Neben der, den der Absturz Auftritt, gibt es 7 threads mit dem folgenden stack trace:
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
Das macht mich Frage mich, ob ich irgendwie Schrauben die Deaktivierung des gleichzeitigen GC (das ist, was ich eigentlich aufgeführt der config).
Ich glaube, die wraps, was ich habe es geschafft so weit. Ich könnte wirklich etwas Hilfe gebrauchen, wie Sie Vorgehen mit den Umgang mit diesem Thema.
scan_dependent_handles
: abhängig Griffe Hinzugefügt wurden vor kurzem auf der CLR (4.0?). Vielleicht ist es ein echter bug, der in der CLR. InformationsquelleAutor der Frage HellBrick | 2013-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bin ich auf der Grundlage meiner Erfahrungen aus der Vergangenheit in unsere Anwendung. Dies könnte verursacht werden, wenn eine Ausnahme unbehandelt, bis die Finalizer-Ebene, und wenn es geht... es zum Absturz der Anwendung.
Bevor Sie etwas auf der GC-Konfiguration..
Einem quick-check... Sind Sie mit dem task-parallel-Bibliotheken?. Wenn ja, stellen Sie sicher, dass Sie die Handhabung von Ausnahmen die richtig. Wenn Ausnahmen aus anderen threads sind die Links nicht behandelte es geht, bis Sie in Gang gesetzt, die dann zum Absturz der Anwendung. Es gibt einige Möglichkeiten, Sie zu behandeln ordentlich. Handhabung von 'Aggregat' - Ausnahme ist eine Möglichkeit (die wir verwendet, um zu lösen!).
http://msdn.microsoft.com/en-us/library/dd537614.aspx
Ich habe nicht 50 Punkte, um einen Kommentar hinzuzufügen, so dass das hinzufügen es als Antwort...
InformationsquelleAutor der Antwort SridharVenkat
Lösung, die mir geholfen haben: deinstallieren .NET 4.5.1, 4.0 installieren, installieren Sie erwähnt, hotfix, installieren 4.5.1 zurück.
InformationsquelleAutor der Antwort Genrih
Ich beendete gerade ein Gespräch mit Microsoft, seit ich in der Lage, ein Problem zu reproduzieren, die ähnlich ist.
In meinem Fall war es ein bug in der .NET-runtime, die mit der Mischung von dynamischen Typen und nicht-dynamischen code. Ich bin mir nicht sicher, ob dies auch der Fall in Ihrem Szenario, aber es gibt einige Sache, die Sie wollen versuchen könnte:
Run
- Modus stattRunAndCollect
.InformationsquelleAutor der Antwort atlaste
Schließlich fand ich ein Update konnte ich installieren. Ich habe auch 4.5 und andere Update für 4.0 wurde nicht installiert. Entfernen 4.5 nicht fix it entweder. Update in der link tatsächlich behoben.
http://kb.machsol.com/Knowledgebase/Article/50305
InformationsquelleAutor der Antwort acheron55
Ich weiß, dies ist eine alte post, aber ich lief in das gleiche Problem wie der OP. Der Punkt atlaste gemacht:
War der Schlüssel für mich. Alle meine Projekte wurden auf Jede CPU nur eine (zufällig der Einstiegspunkt für die Anwendung, die ist eine Konsole-Anwendung-Projekt). Dieses Projekt wurde eingestellt, um x86. Sobald ich es geändert Jede CPU die Applikation lief einwandfrei.
InformationsquelleAutor der Antwort HighGuard2012
Hatten wir das gleiche problem in unserem .NET 4.5-desktop-app - web-scraper. Es stürzte, zufällig unter der schweren Last. Also wir habe die Suche nach Möglichkeiten, um herauszufinden, was war die Ursache für ein paar Monate: wir haben alles versucht! Deaktivieren concurrent GC, wenn er auf den Server-Modus und viele-viele andere workarounds, bis wir erkannt haben, dass die Abstürze aufgetreten, weil der PhantomJS Modul. Es nutzt einige nicht verwalteten Ressourcen und nicht hinterher 🙁 Also haben wir ein stand-alone-Konsole app für PhantomJS integration. Nun führen wir diese Konsole app mit
Process.Start
aus web-scraper und töten Sie danach. Es dauert mehr Zeit für das kratzen, aber nicht mehr abstürzt!InformationsquelleAutor der Antwort Daniel Vygolov