如何解决ASP.NET 4.0 Web应用程序中的内存泄漏包含ashx处理程序?

时间:2014-01-31 12:11:58

标签: architecture .net memory-management

我的团队使用带有实体框架,ASHX处理程序和网页的ASP.NET 4.0构建了一个Web企业ERP应用程序(> 20)。该应用程序的构建可容纳超过15000个用户。但是当应用程序托管在Test Enviroment上时,它会在登录用户超过600时抛出Bad Gateway错误。该应用程序包含3层 - 前端(ASPX页面),实体层,DataAccess层(类)。

后端服务器是SQL Server 2008 R2。

测试报告说 - 连接TimeOuts,大量内存泄漏和非托管代码。 我们已经尽力通过处理对象和类等来修复内存泄漏。应用程序不包含最少的图像。

但问题仍然存在。甚至Web和DB服务器的服务器配置都非常高端。 16个CPU和4 GB RAM。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

这将花费你一些时间并“挖掘”来处理造成问题的原因。如果没有访问代码,我们可以提供的就是调查的内容,例如:

  • 使用性能监视器可以更好地了解到底发生了什么。在Web和数据库服务器上执行此操作。您希望将不同的计数器用于ASP.NET和SQL Server。搜索perfmon.exe,计数器,ASP.NET和SQL Server应该让您在正确的路径上开始使用哪些计数器。运行各种方案并详细检查数字:网站上的单个用户执行各种操作,10个用户,100个等。

  • 使用SQL Server Profiler深入了解数据库方面的情况。

  • 使用WinDbg - 互联网搜索可以帮助您走上正确的道路 - 如果您不熟悉它,可能需要一些提升,但功能强大。

  • 过去我使用Red Gate ANTS Performance Profiler和Memory Profiler(Red Gate)等工具运气不错。这些工具可能会花费一些成本,但它们比我们能够快速识别“低悬的水果”问题所花费的更多方式。披露 - 我不以任何方式与Red Gate有关联。

  • 测试环境中的问题是否恰好在用户超过600时启动,或者通常只是某个数字变化但超过600?如果问题始终始于相同数量的用户,那么就可以了解新用户登录时究竟发生了什么 - 您是否正在加载大量不一定需要的数据,等等。实际上,您应该看一下即使问题开始的用户数量不同,它只是有一个“气味”,如果它总是从600开始......

  • 您是否大量使用Session?它存放在哪里?

  • 您需要支持的并发用户数是多少?你提到15,000,你是否在Web服务器之间进行平衡? (这不一定与解决您的问题有关,但您可能需要为您的架构考虑一些事项)

  • 4 GB的RAM不是很高端,特别是对于数据库服务器。您可能需要更多,但这并不是说“只是抛出RAM”问题,上述项目仍应进行调查。