.net Web应用程序在终结器被阻止时挂起

时间:2018-08-03 21:01:29

标签: .net finalizer hung

我们有一个应用程序runnnig超过一年,并且从2个月前开始挂起。同时,我们可以获得挂起进程的两个转储,并且通过debugdiag分析了结果,告诉我们必须怀疑finalizer线程被阻塞。

从debugdiag提供的信息开始,借助windbg,我们在发生崩溃时检查了以下情况: -所有线程都处于抢占模式 -终结器的堆栈显示ntdll!NtWaitForMultipleObjects + a或ntdll!NtWaitForSingleObject + a

应用程序正在使用托管代码,但是在debugdiag结果的“以前的.NET异常报告(所有.NET Heaps中的异常)”部分上,我们可以看到System.ExecutionEngineException属于其他可疑的异常。例如,System.OutOfMemoryException和System.StackOverflowException。这些仅出现一次,但可能与阻止的终结器相关(或没有?)

一些关于环境的数据

  • CLR版本4.0.30319.36440
  • 操作系统Windows Server 2012 R2
  • 处理器数量4
  • 64位处理位
  • 处理器类型X64

最终器线程堆栈如下:

ntdll!NtWaitForSingleObject+0xa
KERNELBASE!WaitForSingleObjectEx+0x94
clr!CLREventWaitHelper2+0x38
clr!CLREventWaitHelper+0x1f
clr!CLREventBase::WaitEx+0x63
clr!SVR::WaitForFinalizerEvent+0x4e
clr!SVR::GCHeap::FinalizerThreadWorker+0x4a
clr!ManagedThreadBase_DispatchInner+0x2d
clr!ManagedThreadBase_DispatchMiddle+0x6c
clr!ManagedThreadBase_DispatchOuter+0x75
clr!SVR::GCHeap::FinalizerThreadStart+0xd7
clr!Thread::intermediateThreadProc+0x7d
kernel32!BaseThreadInitThunk+0x22
ntdll!RtlUserThreadStart+0x34

我们花了很多时间试图弄清楚这里发生的事情,但是没有成功,我们也关注了几篇相关的文章,一切都没有用。

有人可以给我们提示这个问题吗?

非常感谢

0 个答案:

没有答案