在检查故障转储文件以查找客户端报告的内存不足异常时,结果!DumpHeap -stat
显示 45,000 个“免费”类型的对象占用了 575MB 的内存,我认为其中大部分必须驻留在第 2 代中,原因是规模。
我首先寻找问题的地方是大对象堆 (LOH) 和固定对象。包含可用空间的大型对象堆只有 70MB,所以这不是问题,运行!gchandles
显示:
GC Handle Statistics:
Strong Handles: 155
Pinned Handles: 265
Async Pinned Handles: 8
Ref Count Handles: 163
Weak Long Handles: 0
Weak Short Handles: 0
Other Handles: 0
与空闲对象的数量(45,000)相比,这是非常少的句柄(大约 600)。对我来说,这排除了由固定引起的空闲块。
我还查看了空闲块本身,看看它们是否具有一致的大小,但经过检查,大小差异很大,从不到 5MB 到只有大约 12 个字节左右。
任何帮助,将不胜感激!我不知所措,因为存在碎片,但没有迹象表明它是由我知道要查看的两个地方引起的,即大对象堆 (LOH) 和固定句柄。