由string.IndexOf引起的ASP.Net应用挂起

最近有一个有趣的案例,我们发现String.IndexOf会造成ASP.Net应用挂起。   问题描述: 通常这种ASP.Net应用程序将挂起,因此IIS工作进程需要重新启动使得应用程序能够正常运行。即使当负载比较低的时候也会发生这种情况。   排除故障: 像以前一样,我们抓获挂起dump,我们可以看到几乎请求都会被GC阻止。下面是一个示例调用堆栈。   ntdll!ZwWaitForSingleObject kernel32!WaitForSingleObjectEx mscorwks!CLREventWaitHelper mscorwks!CLREvent::WaitEx mscorwks!SVR::gc_heap::wait_for_gc_done mscorwks!SVR::gc_heap::try_allocate_more_space … Some customer code here … System_Web_ni!System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32)   但是,如果去查看一下GC线程,发现他们根本不在GC状态。之后我们发现线程48禁用了PreEmptive GC,不允许GC来暂停它。所以GC必须等到这个线程结束。   PreEmptive Lock ID OSID ThreadOBJ State GC GC Alloc Context Domain Count APT Exception 24 1 1e48 000000000015f280 1808220 Enabled 00000000902c9e50:00000000902c9e70 00000000001bbbe0 1 MTA (Threadpool Worker) …………………… 48 8…

0

当一个进程中加载多个.NET Runtime的时候如何在托管调试中加载指定的mscordacwks.dll

当多个.NETRuntime加载在一个目标进程或一个dump文件中,例如:  0:030> lm  start end module name  00000000’1b6d0000 00000000’1b9ba000 System_Data (deferred) …  000007fe’f3e60000 000007fe’f47c5000 clr (deferred) …  000007fe’f9880000 000007fe’fa230000 mscorwks (deferred) …  0:030> lmvm clr  start end module name  000007fe’f3e60000 000007fe’f47c5000 clr (deferred) Image path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll  Image name: clr.dll  ……  CompanyName: Microsoft Corporation  ProductName: Microsoft® .NET Framework  InternalName: clr.dll  OriginalFilename: clr.dll  ProductVersion: 4.0.30319.1  FileVersion: 4.0.30319.1…

0