我有一个问题,关于在Windows上运行的ASP .NET Core 2.1应用程序,它会增加内存消耗,最终崩溃并需要杀死.NET Core Host进程。我怀疑原因可能是后台每小时运行的同步任务,经确认禁用它可以解决该问题。
我使用VisualStudio 2019诊断工具对此同步任务进行了分析,发现了一种我无法理解的行为:
我使用VisualStudio 2019诊断工具对此同步任务进行了分析,发现了一种我无法理解的行为:
正如你所看到的,我拍摄了3个快照:
- 同步方法开始时
- 同步方法结束时
- 稍晚一些,当我们退出范围时
在快照表中,我看到一个对我来说似乎合理的行为:任务期间(2)堆大小显著增长,并在退出范围(3)时几乎恢复到初始大小(1)。然而,“进程内存”图表显示了不同的情况:内存消耗增加了,但从未下降。
我以发布模式使用dotnet run
启动应用程序,并查看由.NET Core Host
进程使用的内存时,发现相同的行为。
我有两个问题:
- 为什么堆大小和进程内存之间会有这种分歧?它们不应该密切相关吗?
- 这可能是我的Web应用程序崩溃的原因吗?看起来是这样,但内存消耗增加应该是暂时的,而不是永久的,直到崩溃。我该如何解决?
备注:我已经用一个简单的 .NET Core 控制台应用程序(2.1和2.2)复现了相同的行为,没有任何依赖项,因此这与 ASP 部分或任何其他库无关:
internal class Program
{
private static void Main()
{
new Whatever().AllocateSomeStrings();
// Snapshot3
Console.ReadKey();
}
}
public class Whatever
{
public void AllocateSomeStrings()
{
// Snapshot1
List<string> numbers = Enumerable.Range(0, 50000).Select(n => n.ToString()).ToList();
// Snapshot2
}
}
OutOfMemoryException
吗?你观察到了那个异常吗? - Matthew WatsonOutOfMemoryException
。 - Tao Gómez Gil