Wir haben eine Anwendung gegen .NET 4.0 geschrieben, die am Wochenende abgestürzt ist und die folgende Meldung in das Ereignisprotokoll aufgenommen hat:
Anwendung: PnrRetrieverService.exe Framework Version: v4.0.30319
Beschreibung: Der Prozess wurde aufgrund eines internen Fehlers in der .NET-Laufzeit unter IP 791F9AAA (79140000) mit dem Exit-Code 80131506 beendet.
Dies ist auf einer Windows Server 2003 R2 Standard Edition-Box. Das Googeln dieses Fehlers hat nichts Relevantes ergeben. Dies tritt beispielsweise nicht in VS Studio auf, sondern auf einer Produktionsbox. Als der Dienst schließlich neu gestartet wurde, traten keine weiteren Probleme auf.
Wie geht man vor, um einen Fehler in der .NET-Laufzeit zu diagnostizieren?
.net
runtime-error
executionengineexception
ALEXintlsos
quelle
quelle
Antworten:
Das ist eine böse, ExecutionEngineException. Ab .NET 4.0 beendet diese Ausnahme das Programm sofort. Die generische Ursache ist eine Beschädigung des Status des gesammelten Müllhaufens. Was wiederum immer durch nicht verwalteten Code verursacht wird. Die genaue Position im Code, an der diese Ausnahme ausgelöst wird, ist nicht hilfreich. Die Beschädigung trat normalerweise lange vor der Erkennung des Schadens auf.
Es wird schwierig sein, die genaue Ursache dafür zu finden. Überprüfen Sie den nicht verwalteten Code, den Ihr Dienst möglicherweise verwendet. Verdacht auf Umweltprobleme, wenn es keinen offensichtlichen Kandidaten gibt, schlecht benommene Malware-Scanner sind berüchtigt. Wenn es sich sehr schlecht wiederholt, besteht der Verdacht auf Hardwareprobleme wie Soft-RAM-Fehler.
quelle
Ein Fehler in der gleichzeitigen Implementierung der Garbage Collection unter x64 .Net 4 kann dies verursachen, wie im folgenden Microsoft KB-Eintrag angegeben:
ExecutionEngineException tritt während der Garbage Collection auf
Sie sollten zuerst eine gründliche Minidump-Untersuchung durchführen, um sicherzustellen, dass das Problem während einer Garbage Collection aufgetreten ist.
Der Minidump-Speicherort befindet sich normalerweise in einem Windows-Fehlerberichteintrag im Ereignisprotokoll nach dem Absturzeintrag. Dann viel Spaß mit WinDbg!
Die neueste Dokumentation zur Verwendung des
<gcConcurrent/>
Konfigurationselements zum Deaktivieren der gleichzeitigen oder (in .NET 4 und höher) Hintergrund-Garbage Collection finden Sie hier .quelle
Ich habe "interne Fehler" in der .NET-Laufzeit festgestellt, die durch Fehler in meinem Code verursacht wurden. Denken Sie nicht, dass nur weil es ein "interner Fehler" in der .NET-Laufzeit war, kein Fehler in Ihrem Code als Grundursache vorliegt. Immer immer immer immer den eigenen Code beschuldigen, bevor Sie den eines anderen beschuldigen.
Hoffentlich haben Sie Protokollierungs- und Ausnahme- / Stapelverfolgungsinformationen, die Ihnen zeigen, wo Sie suchen müssen, oder dass Sie den Status des Systems vor dem Absturz wiederholen können.
quelle
Für diejenigen, die von Google hierher kommen, bin ich schließlich auf diese SO-Frage gestoßen , und diese spezifische Antwort hat mein Problem gelöst. Ich habe Microsoft über den Live-Chat auf support.microsoft.com wegen des Hotfixes kontaktiert und sie haben mir per E-Mail einen Link zum Hotfix gesendet.
quelle
Nach Jahren des Ringen mit diesem Problem in einer Reihe von Anwendungen scheint Microsoft es endlich als Fehler in .NET 4 CLR akzeptiert zu haben, der dies verursacht. http://support.microsoft.com/kb/2640103 .
Ich hatte es zuvor "repariert", indem ich den Garbage Collector gezwungen hatte, im Servermodus (gcServer enabled = "true" in app.config) ausgeführt zu werden, wie in dem Microsoft-Artikel beschrieben, auf den Think Before Coding verweist. Dies zwingt im Wesentlichen alle Threads in der Anwendung dazu, während der Erfassung anzuhalten, wodurch die Möglichkeit beseitigt wird, dass andere Threads auf den vom GC manipulierten Speicher zugreifen. Ich bin froh, dass meine jahrelange vergebliche Suche nach einem "Fehler" in meinem Code oder anderen nicht verwalteten Bibliotheken von Drittanbietern nur erfolglos war, weil der Fehler im Code von Microsoft lag, nicht in meinem.
quelle
Könnte ein Fehler bei gleichzeitiger GC sein http://support.microsoft.com/kb/2679415
quelle
Hatte genau den gleichen Fehler auf der WinXP-Box mit der neuesten Version meines .NET 4-Codes. Frühere Builds überprüft - jetzt stürzen sie auch ab! Ok, also bin ich es nicht :). Keine Vorschläge hier / oben geholfen.
Viel neuerer (2018-05-09) Bericht über dasselbe Problem: Anwendungsabsturz mit Exit-Code 80131506 .
Die Grundursache ist noch unbekannt (Maschine wird nicht aktualisiert und hat wenig Verwendung), aber das hat es für mich getan !
quelle
In meinem Fall trat diese Ausnahme auf, als der Speicherplatz abgelaufen war und .NET keinen Speicher im virtuellen Windows-Speicher zuweisen konnte.
Im Ereignisprotokoll habe ich diesen Fehler gesehen:
Anwendungs-Popup: Windows - Minimum des virtuellen Speichers zu niedrig: Ihr System verfügt nur noch über wenig virtuellen Speicher. Windows vergrößert die Auslagerungsdatei für den virtuellen Speicher. Während dieses Vorgangs können Speicheranforderungen für einige Anwendungen abgelehnt werden.
Und vorheriger Fehler:
Die C: -Diskette ist voll oder fast voll. Möglicherweise müssen Sie einige Dateien löschen.
quelle
In meinem Fall war das Problem eine C ++ / CLI-Bibliothek, in der die NtQuerySystemInformation aufgerufen wurde . Aus irgendeinem Grund wurde der CLR-Heap manchmal (und unter mysteriösen Umständen ) beschädigt, als er aufgerufen wurde, und die Anwendung stürzte ab.
Ich habe das Problem mithilfe eines mit HeapCreate erstellten "benutzerdefinierten Heaps" behoben und dort die von dieser Funktion verwendeten Puffer zugewiesen .
quelle
Ich bin mir nicht sicher, ob es allen helfen kann, aber ich könnte das umgehen, indem ich renne
...in dem Weg
{Visual_Studio_root}\Common7\Ide
Ich hatte die folgenden Fehler im Ereignisprotokoll und VS stürzte die ganze Zeit nur ab und startete neu:
quelle
In meinem Fall war das Problem auf doppelte Bindungsumleitungen in meiner web.config zurückzuführen. Mehr Infos hier .
Ich nehme an, es lag daran, dass NuGet die Bindungsumleitungen geändert hat, aber zum Beispiel sah es so aus:
Das Entfernen aller Duplikate löste das Problem.
quelle
In meinem Fall trat dieser Fehler beim Anmelden in der SAP Business One 9.1-Anwendung auf. In Windows-Ereignissen konnte ich neben dem vom OP gemeldeten auch ein anderes Fehlerereignis finden:
Auf dem Computer wird Windows 8.1 mit installiertem .NET Framework 4.0 und ohne Version 4.5 ausgeführt. Da es aus dem Internet so aussah, als könnte es sich auch um einen Fehler in .NET 4 handeln, habe ich versucht , .NET Framework 4.5.2 zu installieren, und das Problem behoben.
quelle
Framework-Version: v4.0.30319 Beschreibung: Der Prozess wurde aufgrund einer nicht behandelten Ausnahme beendet. Ausnahmeinfo: System.Reflection.TargetInvocationException
Ich habe diesen Fehler festgestellt. Die Anwendung funktionierte auf einigen PCs und auf einigen PCs mit dem oben genannten Fehler einwandfrei. Ich deinstalliere das Framework 4.5 und installiere es erneut. Dadurch wurde mein Problem behoben.
Jubeln.
quelle
Dies kann eine Ausnahme sein, die im Finalizer auftritt. Wenn Sie das Muster von ~ Class () {Dispose (false) ausführen; } Überprüfen Sie, was Sie als nicht verwaltete Ressource bereitstellen. Probieren Sie es einfach aus ... fangen Sie dort und es sollte Ihnen gut gehen.
Wir fanden das Problem, da wir diesen mysteriösen Fehler ohne Protokolle hatten. Wir haben das übliche empfohlene Muster für die Verwendung einer "void Dispose (bool disposing)" angewendet.
Bei Betrachtung der Antworten auf diese Frage zum Finalizer haben wir einen möglichen Ort gefunden, an dem die Entsorgung der nicht verwalteten Ressourcen eine Ausnahme auslösen könnte.
Es stellt sich heraus, dass wir das Objekt irgendwo nicht ordnungsgemäß entsorgt haben, sodass der Finalizer die Einlagerung nicht verwalteter Ressourcen übernommen hat. Siehe, es ist eine Ausnahme aufgetreten.
In diesem Fall wurde die Kafka Rest-API verwendet, um den Client von Kafka zu bereinigen. Scheint, dass es irgendwann eine Ausnahme ausgelöst hat, als dieses Problem auftrat.
quelle
In meinem Fall hing das Problem mit " Referenzieren der .NET-Standardbibliothek in klassischen asp.net-Projekten " und diesen beiden Problemen zusammen
https://github.com/dotnet/standard/issues/873
https://github.com/App-vNext/Polly/issues/628
Ein Downgrade auf Polly v6 reichte aus, um das Problem zu umgehen
quelle
Ich habe nie herausgefunden, warum das für mich passiert ist. Es war für eine meiner Anwendungen durchweg reproduzierbar, verschwand jedoch nach einem einfachen Neustart.
Ich verwende Windows 2004 Build 19582.1001 (Insider Preview) mit .net-4.8 und wäre auch nicht überrascht, wenn dies auf einen Hardwarespeicherfehler zurückzuführen wäre. Außerdem lädt meine Anwendung nicht verwalteten Code und initialisiert ihn, sodass ich nicht beweisen kann, dass der Absturz nicht darauf zurückzuführen ist.
quelle
Alle 5-10 Minuten stürzte mein Anwendungspool mit diesem Exit-Code ab. Ich möchte Ihr Vertrauen in den Garbage Collector nicht ruinieren, aber die folgende Lösung hat bei mir funktioniert.
Ich habe einen Job hinzugefügt, der
GC.GetTotalMemory(true)
jede Minute anruft .Ich nehme an, dass der GC aus irgendeinem Grund den Speicher nicht oft genug automatisch auf die hohe Anzahl von Einwegobjekten überprüft, die ich verwende.
quelle