经典ASP中的内存监控/泄漏/问题

时间:2013-03-06 11:36:47

标签: asp.net iis memory-leaks asp-classic windows-server-2012

我被要求查看已经放慢到停止点的服务器。服务器上运行着数百个经典ASP站点,在检查了一些代码后,我发现有很多实例,其中ADODB.Recordset(以及其他)对象被打开,使用,但从未被销毁(设置为Nothing)。我很欣赏可能还有其他问题,我还没有发现......

原始代码开发人员拒绝承担任何责任,因为他们表示,在网站初次部署后,他们的工作表现良好多年。

不幸的是,当天没有足够的时间检查所有网站上的所有代码。因此,是否有任何可用的应用程序可以监视内存使用,泄漏或任何可能有助于诊断导致服务器停止运行的内容?

最初这些网站是在Win2003,IIS6上,但现在已经转移到Win2012,IIS8。现在在新服务器上也经历了减速,所以我确定它不是硬件故障。

任何建议将不胜感激。请注意我也用ASP.NET标记了这一点,因为我很欣赏大多数经典的ASP开发人员现在正在使用.NET,但可能能够根据他们的经验提出建议......

3 个答案:

答案 0 :(得分:1)

所有打开的连接都可能在高负载下引起问题,但即使在ASP Classic中也有一些不错的垃圾收集。当页面处理完毕后,打开的对象和连接将自动关闭。另见:https://stackoverflow.com/a/1613337/25163

我过去曾使用粗略的ASP Profiler来查找我仍然维护的ASP / VBScript网站中特定瓶颈的位置。我会查看具有有问题加载时间的任何特定页面的日志,并首先将其作为目标。

如果你还没有这方面的程序,我在几个项目中使用了SmarterStats的免费版本。运行SmarterStats的服务器需要能够运行ASP.NET站点。

如果没有对最有问题的领域进行更多调查,任何其他建议都将在黑暗中进行。特别是因为真正的问题可能就在数据库末端。分析有问题的页面有助于找到答案。

答案 1 :(得分:0)

除了进入每个文件并手动将每个Recodset,Connection,Command等对象设置为空,我认为你还有很多其他事情可做。

几年前我有类似的东西,我唯一的解决方案是上面的。

抱歉!

答案 2 :(得分:0)

根据我的经验销毁记录集(设置为空)不会影响性能。您需要检查以下内容:

  • 数据库连接处于打开状态,然后未关闭。
  • 使用应用程序变量(这些会损坏大量内存)。
  • 过度使用会话变量(在某种程度上)。
  • 使用SQL查询提取不需要的数据或不进行分页更正。
  • 文件操作过多。