小编use*_*230的帖子

完成队列卡住

最近我们发现我们的服务器应用程序之一(因此它是 Windows 服务)因 OutOfMemory 异常而失败。我们试图找出发生了什么,但最终确定队列中的对象没有被最终确定,因此不会对它们进行垃圾回收。我们试图通过使用 Windbg 找出哪个终结器会导致这种行为,但我们无法找出究竟是哪个对象导致了这种行为。

通过使用 !finalizequeue 命令,我们可以发现这一点:

    0:053> !finalizequeue
    未加载 clr.dll 的 PDB 符号
    要清理的同步块:0
    将要发布的自由线程接口:0
    要发布的 MTA 接口:0
    待发布的STA接口:0
    ----------------------------------
    第 0 代有 28 个可终结对象(050eab4c->050eabbc)
    第 1 代有 15 个可终结对象 (050eab10->050eab4c)
    第 2 代有 658 个可终结对象 (050ea0c8->050eab10)
    准备完成 3027 个对象 (050eabbc->050edb08)
    ...

3027 是一个非常高的数字(运行几分钟后,这个数字仍在增长并且从未下降)。我试图找出地址 050eabbc 上的对象,但它总是不同的类型,所以我认为这不是原因。

如果我尝试打印终结器线程的本机调用堆栈,则会得到以下信息:

    0:053> ~2k
    *** 错误:找不到符号文件。默认为 C:\Windows\SYSTEM32\KERNELBASE.dll 导出符号 -
    ChildEBP RetAddr  
    警告:堆栈展开信息不可用。以下框架可能是错误的。
    032ef09c 772f10b4 ntdll!ZwWaitForSingleObject+0xc
    *** 错误:找不到符号文件。默认为 C:\Windows\SYSTEM32\combase.dll 导出符号 -
    032ef0b0 755ff0b5 内核数据库!等待单个对象+0x12
    032ef0e4 7554b22a combase!NdrOleDllGetClassObject+0x1399
    032ef108 755ff10c combase!PropVariantCopy+0x177b
    032ef224 75511724 …

.net c# garbage-collection windbg finalizer

4
推荐指数
1
解决办法
3326
查看次数

标签 统计

.net ×1

c# ×1

finalizer ×1

garbage-collection ×1

windbg ×1