ASP.NET MVC5应用程序内存泄漏

时间:2018-08-20 08:15:36

标签: asp.net-mvc iis memory-leaks iis-8 windows-server-2012-r2

我有一个ASP.NET MVC5 Web应用程序,它消耗了生产服务器上的大量内存(过多的原因是随着时间的推移它会增加,并且直到我们将应用程序池回收到约8 GB时才停止)我们让它达到的最大值是30 GB)。该应用程序在我的开发机或测试服务器上无法像这样执行。

生产服务器是运行IIS 8.5.9600的Windows Server 2012 R2。

我编写了一个小型测试工具,该工具可以创建50个并发线程,并且每个线程发送1000个顺序请求。在开发过程中,Web应用程序的内存大约为400 MB,就像在我们的测试环境中一样。在生产服务器上,内存不断增加。端点做什么无关紧要,我只是返回了普通的.cshtml Razor视图。

一段时间以来,我一直在尝试找出可能导致内存泄漏的原因,并尝试了一些方法:

  • 进行内存转储并使用探查器(我尝试了几种不同的探查器)。它们都表明,即使在8 GB的内存转储上,托管内存也在合理的范围内(〜100-200 MB)!
  • 部署Visual Studio生成的默认“空” ASP.NET MVC应用程序的副本,然后运行指向该程序的测试工具。相同的症状;内存在开发和测试环境中稳定,但在生产服务器上增加。我将让它运行一会儿,看看它能走多高,但是到目前为止它是3 GB,并且每次请求都在增加。

生产服务器确实具有96 GB的RAM,据我对IIS如何使用它的了解,它可能会非常贪婪。但是我的开发机有32 GB,我见过的最大应用程序池大小约为600 MB,然后它经过GC处理后又减小到约400 MB。

什么占用了所有内存?这是IIS的正常行为吗?

更新: 我已经在Azure上创建了具有类似规格(112 GB RAM)的新VM服务器,并且内存也停止在400 MB左右。必须有特定于我们的生产服务器的东西才引起问题。

1 个答案:

答案 0 :(得分:1)

在我们的案例中,正是我们的托管服务提供商安装了​​一些监视工具,这些监视工具对.NET分析API的使用不佳。

我建议任何在应用程序中观察到类似症状的人尝试配置新的服务器实例。