1

下图很好地显示了我的问题。

我有一个应用程序,它会占用它可以获取的所有内存。图像中的快照是在 5-10 分钟的时间跨度内拍摄的。在上一个快照中,我尝试通过 dotMemory 强制执行 GB。

上周末它吃掉了服务器上 60Gb 的可用内存,IIS 重新启动了进程,然后一切都回到了应用程序,从 1Gb 开始,然后再次达到 60Gb。

在此处输入图像描述

.NET 总数和使用的 .NET 似乎保持增长一点,但没有应用程序消耗的总内存那么多。

查看快照之间的比较“系统”似乎是拥抱所有内存的命名空间。它远远领先于排名第二的“微软”。

在此处输入图像描述

展开“系统”窗格会给我以下视图。

在此处输入图像描述

我将如何进一步分析?当我尝试查看“密钥保留路径”时,我得到以下内容,这似乎对我没有太大帮助。

在此处输入图像描述

我以前玩过dotMemory,但我以前从未经历过这样的事情。通常我可以快速找到一些我自己的命名空间,并通过它缩小到我的代码中我忘记处理某些东西的位置。

我尝试查找其他问题,但似乎没有一个问题与我的情况相同。如果您知道我尚未找到的问题,请随时向我指出另一个问题的方向。

4

1 回答 1

1

快照中的所有内存都是托管内存。您的应用程序的本机代码内部存在巨大的内存泄漏。一些 Collection 或 XML 对象保存在内存中,然后保留一些本机内存。

在 dotTrace 中,您看不到谁保留了您的原生记忆(目前)。您可以使用 ANTS Memory Profiler 执行此操作。或本地部分的 Deleaker。

于 2018-12-08T12:53:39.920 回答