gpt4 book ai didi

c# - 托管堆 .Net 4.5 中的未知对象

转载 作者:IT王子 更新时间:2023-10-28 23:36:05 24 4
gpt4 key购买 nike

我在服务器类 Windows 2012 R2 机器上遇到问题,该机器偶尔将其托管的 .net 堆增加到超过 10GB(通常应该是 1-2GB)。在第 2 代收集之后,我在此框上进行了内存转储,以尝试查找在堆上分配了哪些对象。

使用 WinDbg/SOS

!dumpheap -stat

生成一个对象列表,其中最大的内存约为 150mb,并且会快速下降。将此输出拉入 excel 并将 TotalSize 相加,我只得到 1.5 GB 的对象(符合我的预期)。

              MT    Count    TotalSize Class Name
00007ffb1ab87a70 1 24 System.Collections.Generic.GenericEqualityComparer`1[[System.UInt64, mscorlib]]
...
00007ffabc178e40 218274 36670032 Ten.RunBar
00007ffabbd172f8 1048576 41943040 Ten.DisruptorTaskTuple
00007ffb1a0502c0 442990 71357200 System.Object[]
00007ffabc1bbce0 676327 97391088 Ten.BalTuple
00007ffabbd5eea8 2342912 149946368 Ten.Run.TaskAction
0000001bf119dc70 1072558 787427166 Free
MANUALLY CALCULATED TOTAL: 1589298584

我的第一个想法是有一些非托管内存泄漏,所以我检查了堆

!EEHeap -gc

这表明 GC 堆大小本身实际上是 10GB

Number of GC Heaps: 1
generation 0 starts at 0x0000001e10623cb0
generation 1 starts at 0x0000001e10485bb0
generation 2 starts at 0x0000001b80001000
ephemeral segment allocation context: none
segment begin allocated size
0000001b80000000 0000001b80001000 0000001b90000000 0xffff000(268431360)
0000001b98000000 0000001b98001000 0000001ba8000000 0xffff000(268431360)
...
0000001e04ee0000 0000001e04ee1000 0000001e109c2cc0 0xbae1cc0(195960000)
Large object heap starts at 0x0000001b90001000
segment begin allocated size
0000001b90000000 0000001b90001000 0000001b9356cbc8 0x356bbc8(56015816)
Total Size: Size: 0x25f028618 (10183935512) bytes.
------------------------------
GC Heap Size: Size: 0x25f028618 (10183935512) bytes.

我已确认内存全部位于第二代堆(性能计数器)中,但不确定从这里到哪里查找丢失的 8.5 GB 托管对象。

还有其他想法/WinDbg/SOS 命令来帮助找到这些吗?

最佳答案

!dumpheap 报告的大小是类型本身的大小,而不是实例的实际大小。

您可以使用 !objsize 列出实例的大小。但是,由于多个实例可能共享对相同对象的引用,因此对 !objsize 的输出求和通常也会产生不正确的结果。

确定托管堆大小的最佳方法是查看 !dumpheap!eeheap 报告的总数。

关于c# - 托管堆 .Net 4.5 中的未知对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25144907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com