我被要求查看一个已经慢到停止点的服务器。服务器上运行着数百个典型的ASP站点,在检查一些代码后,我发现有很多实例中ADODB.Recordset (以及其他)对象正在被打开、使用,但从未被销毁(设置为空)。我意识到可能还有其他我还没有发现的问题……
原始代码开发人员拒绝承担任何责任,因为他们表示,在网站的初始部署之后,他们多年来一直运行良好。
不幸的是,一天中没有足够的时间来检查所有站点上的所有代码。因此,有没有可用的应用程序可以监视内存使用情况、泄漏或任何可能有助于诊断导致服务器停止的原因?
最初,这些网站位于Win2003,IIS6,但现在已转移到Win2012,IIS8。现在在新服务器上也遇到了速度减慢的问题,所以我确信这不是硬件故障。
如有任何建议,我们将不胜感激。请注意,我也用ASP.NET标记了这一点,因为我感谢大多数经典的ASP开发人员现在都在使用.NET,但也许能够从他们的经验中提出一些建议……
发布于 2013-03-08 04:08:11
所有打开的连接都有可能在高负载下导致问题,但即使回到ASP Classic,也有一些像样的垃圾回收。当页面完成处理时,保持打开的对象和连接将自动关闭。另请参阅:https://stackoverflow.com/a/1613337/25163
我过去使用过一个简单的ASP Profiler来查找我仍然维护的ASP/VBScript站点中的特定瓶颈所在。我会查看任何加载时间有问题的特定页面的日志,并首先针对这些页面。
如果你还没有这样的程序,我已经在几个项目中使用了SmarterStats的免费版本。但是,运行SmarterStats的服务器需要能够运行ASP.NET站点。
如果不对最有问题的领域进行更多的调查,任何其他建议都将是白费力气。特别是因为真正的问题很可能是在方程式的数据库端。分析有问题的页面将有助于找出这一点。
发布于 2013-03-06 19:47:37
除了进入每个文件并手动将每个Recodset、Connection、Command等对象设置为空之外,我不认为您还能做什么。
几年前我也有过类似的经历,我唯一的解决方案就是上面提到的。
抱歉的!
发布于 2013-03-08 16:19:31
从我的经验中销毁记录集(设置为零)不会影响性能。您需要检查以下内容:
SQL文件数据库连接处于打开状态,但未关闭。使用应用程序变量(这些变量会占用大量memory).
https://stackoverflow.com/questions/15246329
复制相似问题