ASP.NET MVC5 应用程序内存泄漏
ASP.NET MVC5 app memory leak
我有一个 ASP.NET MVC5 Web 应用程序在我们的生产服务器上消耗了过多的内存(过多是因为它随着时间的推移而增加并且似乎直到我们回收应用程序池时才停止 ~ 8 GB,我们让它达到的最大值是 30 GB)。该应用程序在我的开发机器或我们的测试服务器上不会像这样执行。
生产服务器是Windows Server 2012 R2 运行ning IIS 8.5.9600.
我写了一个小测试工具,它创建 50 个并发线程,每个线程发送 1000 个顺序请求。在开发中,Web 应用程序的内存保持在 400 MB 左右,就像在我们的测试环境中一样。在生产服务器上,内存不断增加。端点做什么并不重要,我只是让它返回一个香草 .cshtml
Razor 视图。
一段时间以来,我一直在尝试找出可能导致内存泄漏的原因,并尝试了一些方法:
- 进行内存转储并使用分析器(我尝试了几种不同的分析器)。它们都表明托管内存在合理数量内(~100 - 200 MB),即使内存转储为 8 GB!
- 部署由 Visual Studio 生成的默认 "empty" ASP.NET MVC 应用程序的副本,并 运行 我的测试工具指向它。相同的症状;内存在开发和测试环境中是稳定的,但在生产服务器上会增加。我打算让它 运行 一段时间,看看它能涨多高,但到目前为止它是 3 GB 并且随着每个请求而攀升。
生产服务器确实有 96 GB 的 RAM,根据我对 IIS 如何使用它的理解,它可能会变得非常贪婪。但是我的开发机器有 32 GB,我看到的最大应用程序池大小约为 600 MB,然后它得到 GC'd 并减少到大约 400 MB。
什么占用了所有内存?这是 IIS 的正常行为吗?
更新:
我在 Azure 上创建了一个具有类似规格(112 GB RAM)的新 VM 服务器,内存也停止在 400 MB 左右。一定是我们的生产服务器特有的东西导致了这个问题。
在我们的案例中,是我们的托管服务提供商安装了一些使用 .NET 分析的监控工具 API 效果不佳。
我建议任何在他们的应用程序中观察到类似症状的人尝试配置一个新的服务器实例。
我有一个 ASP.NET MVC5 Web 应用程序在我们的生产服务器上消耗了过多的内存(过多是因为它随着时间的推移而增加并且似乎直到我们回收应用程序池时才停止 ~ 8 GB,我们让它达到的最大值是 30 GB)。该应用程序在我的开发机器或我们的测试服务器上不会像这样执行。
生产服务器是Windows Server 2012 R2 运行ning IIS 8.5.9600.
我写了一个小测试工具,它创建 50 个并发线程,每个线程发送 1000 个顺序请求。在开发中,Web 应用程序的内存保持在 400 MB 左右,就像在我们的测试环境中一样。在生产服务器上,内存不断增加。端点做什么并不重要,我只是让它返回一个香草 .cshtml
Razor 视图。
一段时间以来,我一直在尝试找出可能导致内存泄漏的原因,并尝试了一些方法:
- 进行内存转储并使用分析器(我尝试了几种不同的分析器)。它们都表明托管内存在合理数量内(~100 - 200 MB),即使内存转储为 8 GB!
- 部署由 Visual Studio 生成的默认 "empty" ASP.NET MVC 应用程序的副本,并 运行 我的测试工具指向它。相同的症状;内存在开发和测试环境中是稳定的,但在生产服务器上会增加。我打算让它 运行 一段时间,看看它能涨多高,但到目前为止它是 3 GB 并且随着每个请求而攀升。
生产服务器确实有 96 GB 的 RAM,根据我对 IIS 如何使用它的理解,它可能会变得非常贪婪。但是我的开发机器有 32 GB,我看到的最大应用程序池大小约为 600 MB,然后它得到 GC'd 并减少到大约 400 MB。
什么占用了所有内存?这是 IIS 的正常行为吗?
更新: 我在 Azure 上创建了一个具有类似规格(112 GB RAM)的新 VM 服务器,内存也停止在 400 MB 左右。一定是我们的生产服务器特有的东西导致了这个问题。
在我们的案例中,是我们的托管服务提供商安装了一些使用 .NET 分析的监控工具 API 效果不佳。
我建议任何在他们的应用程序中观察到类似症状的人尝试配置一个新的服务器实例。