【问题标题】:ASP.NET MVC5 app memory leakASP.NET MVC5 应用程序内存泄漏
【发布时间】:2019-01-26 08:08:03
【问题描述】:

我有一个 ASP.NET MVC5 Web 应用程序在我们的生产服务器上消耗了过多的内存(过多,因为它会随着时间的推移而增加,并且似乎不会停止,直到我们以 ~8 GB 回收应用程序池,我们让它达到的最大值是 30 GB)。该应用程序在我的开发机器或我们的测试服务器上的执行情况并非如此。

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

我编写了一个小型测试工具,它创建 50 个并发线程并每个线程发送 1000 个顺序请求。在开发过程中,Web 应用程序的内存保持在 400 MB 左右,就像在我们的测试环境中一样。在生产服务器上,内存不断增加。端点做什么并不重要,我只是让它返回一个香草.cshtml Razor 视图。

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

  • 进行内存转储并使用分析器(我尝试了几种不同的分析器)。它们都表明托管内存在合理的范围内(~100 - 200 MB),即使是 8 GB 的内存转储!
  • 部署由 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 左右。一定是我们的生产服务器特有的东西导致了问题。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 2016-03-28
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多