【问题标题】:Classic ASP site is hanging occasionally经典 ASP 网站偶尔挂起
【发布时间】:2013-03-25 21:10:22
【问题描述】:

我们在 IIS 7.5 上有一个经典的 ASP 网站。

用户随机遇到响应缓慢的问题。发生这种情况时,用户会在几分钟内无法做任何事情,这非常令人沮丧。

例如,我可以打开主页,然后通过类别单击几次,然后网站就停止响应。

当网站停止响应时,我没有注意到任何规则。有时,它一直运行良好,有时它会停止。

当它响应缓慢时,我可以等待几分钟然后获取页面。我试图停止页面加载并刷新页面,但这没有帮助。发生这种情况时,我无法刷新页面,也无法转到其他页面。网站上的每个页面都没有响应。

但是,如果我打开其他浏览器,假设我在 Chrome 中打开 IE,新浏览器中的站点又快了。

我唯一的线索是,如果我在客户端删除 ASP 会话 cookie,那么在同一个浏览器中再次加载页面会很快。所以,这显然与 ASP 会话 cookie 有关。 IIS 或 ASP 引擎能否以某种方式阻止 ASP 会话?

我注意到,如果我快速点击网站,响应速度会更慢。看起来在几次快速点击后服务器可能会出于某种原因拒绝该会话?

另外,我不确定它是否有用并与问题相关,我经常看到许多不同的 ASP 会话 cookie。我想在浏览器中每个用户应该只有一个会话 cookie,但我看到几个不同的会话 cookie 具有不同的值。

有人见过类似的吗?知道如何解决这些偶尔出现的缓慢响应吗?

谢谢!

编辑: 我发现当响应缓慢时,我什至无法加载空的 ASP 页面(我用一行代码创建了页面,只是使用 Response.Write “工作”)。 当然,如果我在另一个浏览器中打开该页面,它很快就会工作。发生问题时,网站仅针对该会话挂起。如果我在其他浏览器中尝试同一页面或在同一浏览器中清除会话 cookie,页面加载速度很快。

【问题讨论】:

  • 通常的原因是数据库查询失控。在不知道您的应用如何工作的情况下,这个问题不是很容易回答。
  • 我怀疑它是数据库,因为每个页面都可能会出现响应缓慢的情况。没有规则。发生问题时,网站上的任何页面都无法访问。但是,如果我手动清除 ASP 会话 cookie,那么网站又快了。另外,如果我打开另一个浏览器,网站也会很快。
  • 那是一个强硬派。您可能想改为在 serverfault.com 上发帖。我认为您不会在这里找到答案。
  • 您在会话 cookie 中存储了多少信息?
  • 查看 IIS 日志以查找执行时间较长和/或状态码为 500 的请求。除了 DB 响应时间长外,外部 ActiveX 组件(例如 OWC)可能会发生挂起。此外,检查您的代码是否存在无限循环和 application.lock/application.unlock 语句。

标签: asp-classic iis-7.5 session-cookies


【解决方案1】:

对于这样的问题,我只是写了一个粗略的函数(我有一个包含)并放入问题页面。该函数将时间戳、计时器(用于捕获毫秒范围内的时间)以及我想要的任何其他变量写入文本文件。

然后我只是在每个可疑代码部分之前和之后调用该函数,并在几天后检查它发现了什么。

记住用户 timer() 作为其中的一部分,因为普通时间戳对于以毫秒为单位捕获时间是无用的

【讨论】:

  • 哇,这是个好主意。该页面正在挂起,但我不确定确切的位置。由于它在随机页面上,我想它是一些包含文件。
  • 嗯,我试过了,但看起来它与任何页面都不相关。然后我点击网站上的链接,一段时间后它挂了。发生这种情况时,我什至无法加载空的 ASP 页面(我创建了一个空页面以查看在站点挂起时没有代码的页面是否正常工作)。
【解决方案2】:

我想我找到了答案。 ASP 网站使用了几个自定义 COM 组件。

其中一些组件正在磁盘上写入日志文件。这些日志是 .txt 文件。

日志文件会随着时间的推移而增长,其中一个超过 4GB。不知何故,写入大文件导致服务器在加载几个页面后响应缓慢。有趣的是,新的浏览器窗口在挂在其他浏览器中时可以快速打开页面。

所以,我从 ASP 代码中删除了写入日志文件的部分,并且网站现在可以正常工作而不会挂起。

谢谢大家!

【讨论】:

    【解决方案3】:

    我也有这个问题。我没有任何数据库或任何自定义的 activex 对象,我在每次操作后立即清理每个对象(如 scripting.filesystemobject),但我确实在应用程序中启用了会话,以便我可以设置会话代码页等等。我确实注意到服务器生成了很多 aspsessionid cookie;也就是说,到页面挂起时,可能有 50 个 assessionid cookie。如果启用了会话,IIS 会生成这些,而我对它们无能为力。每隔 20-30 分钟,页面就会突然挂在我的会话中。调出另一个浏览器实例(例如,另一台机器,或隐私浏览模式)将再次正确响应。离开浏览器 5 分钟也将导致它开始正确响应。我知道循环我可以检查 response.isclientconnected 并执行 response.end 如果他们的连接已死终止服务器进程,但我的客户端仍然连接,所以这没有帮助。

    【讨论】:

      猜你喜欢
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2019-05-24
      • 2023-03-23
      相关资源
      最近更新 更多