2 votes

L'application ASP.NET 2.0 C# se bloque avec une violation d'accès mémoire sur NTDLL

Nous avons une série d'applications ASP.Net Web API 2.0 qui fonctionnent sur un serveur commun (Server 2012 avec IIS 8.5). Chaque application est dans son propre pool d'applications. La pile est .NET 4.5, le pilote RabbitMQ 3.6.6 et le pilote MongoDB 1.11, postsharp express.

Récemment, les applications ont commencé à se bloquer à des intervalles aléatoires avec des exceptions de violation d'accès.

L'examen des Crash Dumps n'a donné aucune information particulièrement utile... du moins pas pour moi. Voici les deux raisons (constantes) des crashs :

In w3wp.exe.13880.dmp the assembly instruction at ntdll!RtlpxLookupFunctionTable+3b in C:\Windows\System32\ntdll.dll from Microsoft Corporation has caused an access violation exception (0xC0000005) when trying to write to memory location 0x06d00ff8 on thread 0

In w3wp.exe.1628.dmp the assembly instruction at ntdll!RtlAcquireSRWLockShared+b in C:\Windows\System32\ntdll.dll from Microsoft Corporation has caused an access violation exception (0xC0000005) when trying to write to memory location 0x611e0ff8 on thread 0

De plus, tous les dumps semblent commencer la trace de la pile pour le crash (et plusieurs autres threads) avec :

kernel32!ExitProcessImplementation+a 
mscoreei!RuntimeDesc::ShutdownAllActiveRuntimes+27b 
msvcrt!_crtCorExitProcess+59 
msvcrt!_crtExitProcess+d 
msvcrt!doexit+15b 
w3wp!ParseCommandLine+bec 
kernel32!BaseThreadInitThunk+22 
ntdll!RtlUserThreadStart+34 

Avez-vous des idées pour déboguer ce problème plus efficacement ? J'ai essayé différentes méthodes de vidage de la mémoire, de journalisation et de débogage de la mémoire gérée à partir du vidage... mais sans succès jusqu'à présent. Toute indication serait appréciée.

2voto

David Schwartz Points 41

Au cas où cela pourrait aider quelqu'un d'autre... ce problème particulier a été causé par un manque de sécurité des threads sur SuatinSoft PdfFocus qui utilisait du code non géré dans le GDI pour convertir les pages PDF en images. Lorsque deux threads accédaient à ce code en même temps, cela provoquait une violation d'accès à la mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X