我们有一系列在公共服务器(带有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
有关如何更有效地调试此问题的任何想法?我已经尝试了不同的内存转储方法,记录和调试来自转储的托管内存...但到目前为止没有成功。任何指针都会受到赞赏。
答案 0 :(得分:2)
以防万一这有助于其他人...这个特殊问题是由于SuatinSoft PdfFocus缺乏线程安全性而导致的,它使用GDI中的非托管代码将PDF页面转换为图像。当两个线程同时访问该代码时,它会导致内存访问冲突