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

3

我被要求查看一台服务器,该服务器已经变得非常缓慢甚至停止运行。这个服务器上有数百个运行经典ASP站点,检查了一些代码后,我发现有很多实例中 ADODB.Recordset(及其他)对象被打开、使用,但从未被销毁(设为Nothing)。我知道可能还有其他问题,只是我还没有注意到...

原始代码开发人员拒绝承担任何责任,因为他们声称在网站最初部署后,它们一直正常运行了几年。

可惜每天的时间不够用,无法检查所有站点中的所有代码。因此,是否有任何应用程序可以监视内存使用情况、泄漏或任何可能有助于诊断导致服务器停止的原因?

最初,这些站点运行在Win2003、IIS6上,但现在已转移到Win2012、IIS8上。新服务器也遇到了减速问题,所以我确定这不是硬件故障。

如果有任何建议,请告诉我。请注意,我在 ASP.NET 中打了标签,因为我知道大多数经典 ASP 开发人员现在正在使用 .NET,但他们可能能够从自己的经验中提出一些建议……


可以配置应用程序池,一旦达到某个内存阈值就重新启动。这至少可以保持应用程序的响应速度,但会不时重置您的站点。为了调试,请查看IIS调试诊断http://support.microsoft.com/kb/919790 - Erik Oosterwaal
3个回答

1
在高负载下,所有开放的连接都可能会导致问题,但即使在 ASP Classic 中也有一些不错的垃圾回收机制。当页面处理完成时,未关闭的对象和连接会自动关闭。参见:https://dev59.com/00nSa4cB1Zd3GeqPSO2j#1613337 我过去曾使用一个简陋的 ASP Profiler 来查找我仍在维护的 ASP/VBScript 站点中特定瓶颈所在的位置。我会查看日志以查找任何具有问题负载时间的具体页面,并首先解决这些问题。
如果您还没有针对此进行的程序,则我曾在几个项目中使用了免费版本的 SmarterStats。运行 SmarterStats 的服务器需要能够运行 ASP.NET 站点。
如果不对最具问题的区域进行更深入的调查,任何其他建议都将是一次无效的尝试。特别是因为真正的问题可能同样存在于数据库端。通过对问题页面进行剖析可以帮助找到问题所在。

非常有帮助的答案,谢谢。我现在感觉自己就像是在瞎猜一样。我有很强的编程背景,可以看到代码中有很多问题。现在只需要试图先分离出最性能最差的应用程序...! - EvilDr

0
除了手动进入每个文件并将每个Recodset、Connection、Command等对象设置为nothing之外,我认为你没有什么其他的办法了。
多年前我也遇到过类似的问题,唯一的解决办法就是上述方法。
很抱歉!

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接