gpt4 book ai didi

.net - .Net应用程序中极端私有(private)字节使用分析, native 内存泄漏?

转载 作者:行者123 更新时间:2023-12-02 15:02:22 30 4
gpt4 key购买 nike

我们有一个正在运行的 .Net 网站,该网站使用了大量的私有(private)字节:4.45 GB 及以上。多个网络服务器上都发生过这种情况,但似乎没有规律可循。

在其他一些答案的帮助下,当然还有the blog of Tess Ferrandez ,我们已经使用 DebugDiag 获得了很多信息。和 WinDbg(Win8 SDK 的一部分):

  • 我们知道只有一个分配消耗了超过 3 GB 的空间: enter image description here

  • 我们知道它是 native 内存: enter image description here

  • 我们知道它分配在堆 1 上: enter image description here

从这里开始我们就陷入困境了。建议的命令(!heap -stat -h、!heap -flt s 和 !heap -p -a)也可以在 here 中找到。 ,请勿向我们提供有关此行为原因的信息。

有人见过这个吗?是否有其他方法或命令来查看导致nativerd(IIS 的 native 代码配置读取器)发疯的原因?

最佳答案

在windbg中加载sos dll。

尝试在windbg中使用!dumpheap -stat。这将返回堆中的所有对象。

遍历堆并查看哪个对象创建的数量更多,并分析该对象是否仍然需要在内存中或应该在很久以前进行垃圾收集。

收集这些对象并执行 !gcroot ,您将能够看到哪个父对象正在阻止您的对象被垃圾收集。这将帮助您缩小内存泄漏的范围。

最常见的内存泄漏是由于使用 .net 中的事件而发生的。 A 类会订阅 B 类的事件。除非 B 类被垃圾回收,否则 A 类仍将驻留在内存中。

更新:

对于 native 内存泄漏,请使用 _CrtDumpMemoryLeaks在代码库中。如果您使用 Visual Studio,则泄漏内存的 block 将显示在输出窗口中

Glowcode还允许您检测 native 内存泄漏。

关于.net - .Net应用程序中极端私有(private)字节使用分析, native 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13174923/

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