【问题标题】:Memory monitoring/leaks/issues in classic ASP经典 ASP 中的内存监控/泄漏/问题
【发布时间】:2013-03-06 11:36:46
【问题描述】:

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

原始代码开发人员拒绝承担任何责任,因为他们表示,在网站初始部署后,他们多年来一直运行良好。

很遗憾,一天中没有足够的时间来检查所有网站的所有代码。因此,是否有任何可用的应用程序可以监控内存使用、泄漏或任何可能有助于诊断导致服务器停止的原因?

这些站点最初位于 Win2003、IIS6,但现在已移至 Win2012、IIS8。现在新服务器上也出现了减速,所以我确定这不是硬件故障。

任何建议将不胜感激。请注意,我也用 ASP.NET 对此进行了标记,因为我很欣赏大多数经典的 ASP 开发人员现在都在使用 .NET,但也许可以从他们的经验中提出一些建议......

【问题讨论】:

  • 可以将应用程序池配置为在达到某个内存阈值后立即重新启动。这至少会让事情变得有点活泼,但它会不时地重置您的网站。对于调试,请查看 IIS 调试诊断 support.microsoft.com/kb/919790

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


【解决方案1】:

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

我过去曾使用粗略的ASP Profiler 来查找我仍然维护的 ASP/VBScript 站点中的具体瓶颈在哪里。我会查看任何加载时间有问题的特定页面的日志,并首先针对这些页面。

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

如果不对最有问题的领域进行更多调查,任何其他建议都将是在黑暗中开枪。特别是因为真正的问题很可能在等式的数据库端。分析有问题的页面将有助于发现这一点。

【讨论】:

  • 非常有帮助的答案,谢谢。我再次觉得自己此刻就像是在黑暗中开枪。我有很强的编程背景,可以看到大量代码问题。这只是试图将性能最差的应用程序的第一个...!
【解决方案2】:

除了进入每个文件并手动将每个 Recodset、Connection、Command 等对象设置为空之外,我认为您无能为力。

几年前我也遇到过类似的情况,我唯一的解决方案就是上述方法。

对不起!

【讨论】:

    【解决方案3】:

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

    • 数据库连接打开然后没有关闭。
    • 使用应用程序变量(这些会占用大量内存)。
    • 过度使用会话变量(在一定程度上)。
    • 使用 SQL 查询提取不需要的数据或不进行分页更正。
    • 文件操作过多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      相关资源
      最近更新 更多