小编nil*_*lls的帖子

如何确定垃圾回收导致死锁的原因?

我正在尝试调试我认为是由 .net 编写的服务中的垃圾收集引起的死锁。当应用程序进入死锁时,我设法创建了一个转储文件,但我不太确定如何使用 WinDbg 确定根本原因。

加载转储时,我通过执行 !locks 开始:

0:000> !locks

CritSec +28bbecf0 at 0000019f28bbecf0
WaiterWoken        No
LockCount          0
RecursionCount     1
OwningThread       3350
EntryCount         0
ContentionCount    1c
*** Locked

CritSec +43810c00 at 0000019f43810c00
WaiterWoken        No
LockCount          18
RecursionCount     1
OwningThread       4bd4
EntryCount         0
ContentionCount    12
*** Locked

Scanned 32 critical sections
Run Code Online (Sandbox Code Playgroud)

查看 !threads,这是(缩写为来自 !locks 的相关线程)输出,其中一个线程似乎是垃圾收集的一部分(?):

0:000> !threads
ThreadCount:      55
UnstartedThread:  0
BackgroundThread: 12
PendingThread:    0
DeadThread:       0
Hosted Runtime:   no

                                                                                                        Lock  
       ID OSID ThreadOBJ           State GC Mode     GC Alloc Context                  Domain …
Run Code Online (Sandbox Code Playgroud)

c# garbage-collection deadlock

6
推荐指数
0
解决办法
1386
查看次数

标签 统计

c# ×1

deadlock ×1

garbage-collection ×1