我正在做一个相当大的经典asp/SQL Server应用程序。 几个月前推出了一个新版本,其中包含许多新功能,而且我必须在某处出现一个非常恶劣的错误:一些非常基本的页面会随机执行很长时间。我如何找到为什么一些经典的asp页面会随机执行很长时间?
一些线索:
- 这是不是数据库:当我运行查询分析器,它没有检测到任何长时间运行的查询
- 当我启动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(低Fragmention堆),这是不是在默认情况下在Windows 2003上,以减少内存碎片
参考LFH:
- http://msdn.microsoft.com/en-us/library/aa366750(v=vs.85).aspx
- http://blogs.msdn.com/b/friis/archive/2008/10/14/fragmentation-m-moire-sous-iis-6.aspx(有一个dll那里,你可以用它来打开LFH,但文章是法语。您现在必须学习我们美丽的语言!)
好主意的网页的子集。我会看到我的用户,如果我可以缩小到一个页面的子集。 繁殖的问题在于它是随机的。你会工作一段时间,突然间它看起来像IIS挂了几分钟。如果您开始另一个浏览器会话,请转到完全相同的页面,快速获得结果。 因此,它看起来并不像浏览器操作系统版本特有的。 它是公开的 我无法重现它,因为它是或者看起来随机的... – 2009-04-21 08:41:57
我找不到任何规则。我终于设置了一个任务,每天晚上在2上重置IIS和SQLServer,并且这似乎在做伎俩......现在,但我认为当负载增加时可能会重新出现。我可能会联系微软PSS,然后... 谢谢你的好主意! – 2009-05-01 10:56:01