asp.net-mvc - ASP.NET MVC5 应用程序内存泄漏
问题描述
我有一个 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 左右。我们的生产服务器一定有一些特定的东西导致了这个问题。
解决方案
在我们的案例中,是我们的托管服务提供商安装了一些使用 .NET 分析 API 的监控工具。
我建议任何在其应用程序中观察到类似症状的人尝试配置新的服务器实例。
推荐阅读
- data-warehouse - 阿帕奇德鲁伊与雪花
- abap - 支持 SAP RFC GUI?
- r - 从数据框中绘制饼图
- apache-kafka - 如何在 DLQ 中自定义标头消息异常
- c# - 在 C# asp.net 中按相同顺序对列表中的相似项进行分组
- javascript - 是否有可能在 shadow dom 中使用 twitter bootstrap 的 css 类?
- caching - 我们什么时候执行缓存失效?
- sql-server - 如果我进行事务日志备份并截断日志文件,我会丢失数据吗?
- java - Java 程序无法执行它写入 /tmp 的文件,没有这样的文件或目录
- flutter - 在按钮上单击导航到选项卡屏幕