【问题标题】:How to resolve Memory Leaks in ASP.NET 4.0 web application contains ashx handlers?如何解决 ASP.NET 4.0 Web 应用程序中包含 ashx 处理程序的内存泄漏?
【发布时间】:2014-01-31 12:11:57
【问题描述】:

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

后端服务器是 SQL Server 2008 R2。

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

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

谁能帮我解决这个问题?

【问题讨论】:

  • 你在使用缓存吗?假设您有 600 个用户,那么服务器正在努力满足数据需求。
  • 新关键字有什么关系吗? danielksmith.wordpress.com/2013/07/05/…
  • 您是否运行过静态代码分析(Fxcop 等)?你确定你的 Dispose 模式都是正确的吗?你有任何用户编写的线程代码吗?线程错误非常普遍,几乎可以肯定。
  • 您的网络服务器中有 16 个内核和 4gb 内存?这是一个非常不平衡的服务器。
  • WinDbg 会在 5 分钟内告诉你这些资源的去向,唯一的麻烦是没有 pryor 经验,你需要 1-2 天才能学会如何正确使用它并了解它的输出是。查看Tess Fernandez's Blog - 用于解决资源使用问题和使用 WinDbg 的大量资源

标签: architecture .net memory-management


【解决方案1】:

这将花费您一些时间并“深入研究”以了解导致问题的原因。无需到场且无法访问代码,我们所能提供的只是调查的内容,例如:

  • 使用性能监视器可以更好地了解具体情况。在您的 Web 和数据库服务器上执行此操作。您希望为 ASP.NET 和 SQL Server 使用不同的计数器。搜索 perfmon.exe、counters、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”来解决您的问题,上述项目仍应进行调查。

【讨论】:

  • WinDbg 的 +1,虽然这是一个陡峭的学习曲线,但学习使用它是无价的。通过正确了解如何使用它,您通常可以在几分钟内准确识别出正在使用您的资源的内容 - 然后是了解内存分配和 GC 实际如何工作以了解如何纠正问题的更难的部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 2011-10-14
  • 2012-11-09
  • 1970-01-01
相关资源
最近更新 更多