gpt4 book ai didi

.net - 带有 system.OutOfMemoryException 的 x86 .net 应用程序

转载 作者:行者123 更新时间:2023-12-02 03:25:21 29 4
gpt4 key购买 nike

应用程序运行 1 天后出现 OutOfMemoryException,该应用程序总共使用了 1.5G 内存,全部由托管堆消耗,第 2 代使用了 200mb ,LOB 使用了 1.3mb ,但奇怪的是,900mb 的空间是免费的。从 perf counter 我看到发生了很多 gen 2 gc 收集,为什么 GC 收集器无法收集 gen2 和 LOB 中的 900mb 可用空间?

非常感谢您的帮助。

以下信息来自windbg:

0:000> !eeheap -gc
Number of GC Heaps: 1
generation 0 starts at 0x183153f0
generation 1 starts at 0x182aa834
generation 2 starts at 0x02131000
ephemeral segment allocation context: none
segment begin allocated size
02130000 02131000 0312f284 0xffe284(16769668)
07750000 07751000 0874fc5c 0xffec5c(16772188)
09e30000 09e31000 0ae2fc2c 0xffec2c(16772140)
0b230000 0b231000 0c22ffec 0xffefec(16773100)
0c230000 0c231000 0d22f6f0 0xffe6f0(16770800)
0d230000 0d231000 0e22ea10 0xffda10(16767504)
0e230000 0e231000 0f22c1c4 0xffb1c4(16757188)
10390000 10391000 1138ddf4 0xffcdf4(16764404)
154e0000 154e1000 164da90c 0xff990c(16750860)
34aa0000 34aa1000 35a9dbfc 0xffcbfc(16763900)
7aca0000 7aca1000 7bc9edfc 0xffddfc(16768508)
49760000 49761000 4a75ef64 0xffdf64(16768868)
7bca0000 7bca1000 7cc99bac 0xff8bac(16747436)
17a70000 17a71000 183313fc 0x8c03fc(9176060)
Large object heap starts at 0x03131000
segment begin allocated size
03130000 03131000 041250c8 0xff40c8(16728264)
08920000 08921000 099102f8 0xfef2f8(16708344)
....
....
4c760000 4c761000 4d71d578 0xfbc578(16500088)
1bb10000 1bb11000 1ca110d0 0xf000d0(15728848)
57760000 57761000 5862d7f8 0xecc7f8(15517688)
Total Size: Size: 0x5ab13450 (1521562704) bytes.
------------------------------
GC Heap Size: Size: 0x5ab13450 (1521562704) bytes.
0:000> !dumpheap -stat
total 0 objects
Statistics:
MT Count TotalSize Class Name
73037c78 1 12 System.Configuration.GenericEnumConverter
73036da0 1 12 System.Configuration.InfiniteIntConverter
....
....
69161c3c 35025 6809420 System.Windows.EffectiveValueEntry[]
69164748 54 12471072 MS.Internal.WeakEventTable+EventKey[]
710e2228 9540 190389260 System.Byte[]
710dd2b8 1317031 339257932 System.String
0035a670 6427 902224056 Free
Total 3615631 objects

最佳答案

如果您要使用 WinDBG/SOS,那么就学习使用它;)Tess Ferrandez 关于此主题的许多帖子都是宝贵的资源。

使用 !dumpheap -stat 收集消耗堆的对象类型(和数量)的统计信息。

使用 !dumpheap -min 查找至少字节大的对象。

使用 !dumpheap 来识别当前位于堆中的对象。

使用 !gcroot 帮助找到任何使您认为已死亡的对象保持活力的根。

如果没有有关您的应用和场景的一些详细信息,就很难进一步诊断。一些提示:

看看你是否有包含很多东西的静态容器或静态对象。请记住 - 静态对象在应用程序的生命周期内存在。因此,静态容器在应用程序的整个生命周期中都存在,如果它们引用了应该被删除的对象,那么这些对象将继续存在。

另请注意,您的应用很可能会消耗大量 RAM,因为可能有大量空闲 RAM,因此不值得花费收集和压缩 LOH 的成本。

这也可能被证明是非常有值(value)的: http://msdn.microsoft.com/en-us/magazine/cc534993.aspx

关于.net - 带有 system.OutOfMemoryException 的 x86 .net 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2694758/

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