【问题标题】:How can I find why some classic asp pages randomly take a real long time to execute?我怎样才能找到为什么一些经典的 asp 页面随机需要很长时间才能执行?
【发布时间】:2009-04-21 07:33:26
【问题描述】:

我正在开发一个相当大的经典 asp/SQL Server 应用程序。 几个月前推出了一个新版本,其中包含许多新功能,我一定有一个非常讨厌的错误:一些非常基本的页面随机需要很长时间才能执行。

一些线索:

  • 不是数据库:当我运行查询分析器时,它没有检测到任何长时间运行的查询
  • 当我启动 IIS 诊断工具时,reqviewer 显示请求处于“处理中”状态
  • 这可能发生在任何页面上
  • 我无法轻易复制它,它完全是随机的。
  • 有一个“很长一段时间”的想法:今天早上我有一个页面需要超过 5 分钟才能执行,通常应该在 100 毫秒内返回给客户端。
  • 该应用程序可以处理相当大的文件上传和下载(最大为 2 GB)。这也通过使用 SoftArtisan FileUp 的经典 asp 脚本来处理。不过不要认为这会导致问题,我们已经上传了很长一段时间了。
  • 我在两台不同的服务器上遇到了问题(在两个不同的位置,具有不同的数据集)。一个是使用良好的 SQL Server 2000 运行应用程序,另一个运行 SQL Server 2005。在这两种情况下,Web 服务器都是 IIS 6。

知道问题是什么或如何解决这类问题吗?

谢谢。

塞巴斯蒂安


编辑:

问题来自内存碎片。一些asp页面用于从服务器下载文件。文件大小可以从几 kb 到超过 2 gb。这些大小的变化会导致内存碎片。 asp 页面也可能需要相当长的时间来执行(用户下载页面的时间减去 IIS 级别缓存中的内容),这对于应该快速执行的服务器页面来说并不是真正的标准。

这就是我所做的改进:

  • 将所有下载逻辑放在一个单独的 asp 页面中,并关闭会话
  • 这让我可以将该 asp 页面放在一个特定的池中,该池可以经常回收(现在下载不会再干扰应用程序的其余部分)
  • 打开 LFH(低碎片堆),在 Windows 2003 上默认不启用,以减少内存碎片

LFH 参考:

【问题讨论】:

    标签: sql-server performance asp-classic iis-6 freeze


    【解决方案1】:

    我在我从事的经典 ASP + ajax 应用程序中发现了同样的情况。使用计时器,我将页面加载时间设置为 153 毫秒,但在萤火虫瀑布图中它随机显示为 3.5 秒。 Timer 输出在响应中,瀑布图声称它是 Firefox 等待来自服务器的响应。因为瀑布图也显示了响应,所以我可以将瀑布图与计时器进行比较,并且“每隔一段时间”存在巨大差异

    【讨论】:

      【解决方案2】:

      你能确定这是所有页面的问题还是部分页面的共同问题?

      如果一个子集检查这些页面的共同点,例如它们都使用特定的 COM dll,而其他页面则没有。

      此问题会影响多个客户端还是仅影响少数几个?

      IOW 是否存在特定浏览器操作系统版本的问题。

      这是公共网络还是 Intranet?

      您能否从您拥有的客户那里重现该问题?

      【讨论】:

      • 页面子集的好主意。如果我可以将其缩小到页面的子集,我将与我的用户一起查看。复制的问题在于它是完全随机的。您将工作一段时间,然后突然发现 IIS 似乎挂了几分钟。如果您启动另一个浏览器会话,请转到完全相同的页面,您将快速获得结果。所以它看起来并不特定于浏览器操作系统版本。它是公开的,我无法复制它,因为它是或看起来是随机的......
      • 我找不到任何规则。我终于设置了一个任务来在每晚 2 点重置 IIS 和 SQLServer,这似乎可以解决问题......现在,但我认为当负载增加时可能会再次出现。那我可能会联系 Microsoft PSS...不过感谢您提供的良好线索!
      【解决方案3】:

      是否有可能在 SQL Server 上进行一些全文搜索查询?

      因为如果是这样,并且如果 SQL Server 无法访问 Internet,则在尝试检查证书时可能会导致每隔几个小时左右延迟 45 秒(尽管这不适用于 SQL Server 2000)。

      有关我所指内容的详细说明,read this

      【讨论】:

      • 有全文搜索查询,但 sqlserver 可以访问互联网。谢谢
      【解决方案4】:

      您的网络服务器上是否正在运行其他应用程序?如果是这样,您的问题是否与他们中的任何一个在同一个应用程序池中?如果是这样,请尝试为它创建一个专用的应用程序池。也许其他应用之一出现问题并对您的应用产生了不利影响。

      【讨论】:

        【解决方案5】:

        需要注意的一点是,如果您在 IIS 中打开了服务器端调试,则 Web 服务器将以单线程模式运行。

        因此,如果您尝试加载页面,而其他人同时点击了该网址,您将排在他们后面。页面加载似乎需要很长时间,但这仅仅是因为服务器在单个文件行中分发页面请求,有时您不在行的前面。

        您可能已将其打开以进行调试,而忘记将其关闭以进行生产。

        【讨论】:

        • 感谢您的想法。我检查了服务器,但服务器端调试已关闭。
        猜你喜欢
        • 1970-01-01
        • 2012-12-03
        • 2011-03-14
        • 2021-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多