ASP.NET 2.0 C#应用程序在NTDLL上因内存访问冲突而崩溃

时间:2017-01-24 17:26:28

标签: c# rabbitmq asp.net-web-api2 mongodb-.net-driver iis-8.5

我们有一系列在公共服务器(带有IIS 8.5的Server 2012)上运行的ASP.Net Web API 2.0应用程序。每个应用程序都在自己的应用程序池中。堆栈是.NET 4.5,RabbitMQ驱动程序3.6.6和MongoDB驱动程序1.11,postsharp express

最近,应用程序已经开始随机访问冲突异常而崩溃。

回顾Crash Dumps没有提供特别有用的信息......至少对我没有。以下是崩溃的两个(一致)原因:

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

此外,所有转储似乎都启动崩溃(以及其他几个线程)的堆栈跟踪:

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 

有关如何更有效地调试此问题的任何想法?我已经尝试了不同的内存转储方法,记录和调试来自转储的托管内存...但到目前为止没有成功。任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

以防万一这有助于其他人...这个特殊问题是由于SuatinSoft PdfFocus缺乏线程安全性而导致的,它使用GDI中的非托管代码将PDF页面转换为图像。当两个线程同时访问该代码时,它会导致内存访问冲突