调试.net挂起-GC正在等待线程挂起?

时间:2020-06-22 21:50:26

标签: .net garbage-collection freeze

分析.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覆盖。

谢谢。

0 个答案:

没有答案
相关问题