分析.Net进程挂起...通过windbg和debugdiag浏览线程堆栈时,我遇到了这个问题:
[0x77baed8c] ntdll!NtWaitForSingleObject+c
[0x74865e89] KERNELBASE!WaitForSingleObjectEx+99
[0x73c4d44a] clr!CLREventWaitHelper2+33
[0x73c4d491] clr!CLREventWaitHelper+2a
[0x73c4d416] clr!CLREventBase::WaitEx+152
[0x73c58ecb] clr!CLREventBase::Wait+1a
[0x73dfd39d] clr!Thread::WaitSuspendEventsHelper+8a
[0x73dfd470] clr!Thread::WaitSuspendEvents+14
[0x73dfb746] clr!Thread::RareEnablePreemptiveGC+98
[0x73c6a40c] clr!Thread::RareDisablePreemptiveGC+137
[0x73c4fe70] clr!ThreadSuspend::RestartEE+154
[0x73c52e08] clr!WKS::GCHeap::GarbageCollectGeneration+233
[0x73c52fec] clr!WKS::gc_heap::trigger_gc_for_alloc+1e
[0x73c53066] clr!WKS::gc_heap::try_allocate_more_space+162
[0x73c4f23a] clr!WKS::gc_heap::allocate_more_space+18
[0x73c4f3a7] clr!WKS::GCHeap::Alloc+5c
[0x73b4a06f] clr!Alloc+87
[0x73b4a0ed] clr!AllocateObject+99
[0x73b4a185] clr!JIT_New+6b
这是因为没有足够的空间分配而最终启动GC的线程。无论如何,它似乎一直在等待所有线程挂起,但是我不是专家。我查看了线程池,所有线程都设置为“抢先式” GC模式。此时,所有线程都停止了,没有任何动作。有些停止等待GC,有些则试图分配更多空间。
上面的堆栈上有任何想法或建议,以及如何确定可能等待什么GC的“原因”?顺便说一句,在我创建的类中没有finalize覆盖。
谢谢。