ASP.NET请求排队导致网站崩溃。SQL后端,IIS6

ASP.NET请求排队导致网站崩溃。SQL后端,IIS6,asp.net,sql,iis-6,Asp.net,Sql,Iis 6,我继承了一个需要帮助的有点复杂的系统(和问题) 我有一个带有以下规格的Web服务器: 硬件: 服务器2003 32位 IIS 6 8芯(16 w/超读) 12gb内存 ASP.NET网站 3个应用程序池,因此3个w3wp.exe实例正在运行 该系统服务于大量用户,在工作时间内带宽相当稳定,达到68000kbit/s 有时系统会“宕机”——网站速度非常慢,会产生大量电话。事情通常会慢60秒,但在时间长度上变化很大。有时只有几秒钟,有时3分钟或更长 我将我的应用程序池设置为回收大约600mb

我继承了一个需要帮助的有点复杂的系统(和问题)

我有一个带有以下规格的Web服务器:

  • 硬件:
    • 服务器2003 32位
    • IIS 6
    • 8芯(16 w/超读)
    • 12gb内存
    • ASP.NET网站
    • 3个应用程序池,因此3个w3wp.exe实例正在运行
该系统服务于大量用户,在工作时间内带宽相当稳定,达到68000kbit/s

有时系统会“宕机”——网站速度非常慢,会产生大量电话。事情通常会慢60秒,但在时间长度上变化很大。有时只有几秒钟,有时3分钟或更长

我将我的应用程序池设置为回收大约600mb的消耗内存。这并不确切,但他们自己回收并取得了很大成功。有时我会手动回收“主”池以清除我正在描述的问题

这就是我所知道的当事情进展缓慢时发生的事情

  • 网络带宽大幅下降
  • ASP.NET性能计数器中排队的请求增加
  • 在w/请求队列中,上升的页面延迟会增加。(我使用了一个简单的ASP页面,该页面进行SQL调用,只说“系统处于活动状态”-此页面会监控延迟)

  • 总体CPU使用率上升

  • w3wp.exe的总内存消耗量增加
在我看来,这就是我想象中正在发生的事情

有人要求系统生成一份报告或一组数据。这会启动一个消耗大量线程(即所有可用线程)的进程,这会导致对系统的所有其他请求在ASP.NET que池中等待,这实际上会杀死站点。缺乏活动导致网络流量下降

我已经阅读了很多关于线程队列、线程池等的文章。这是一个很好的例子:并且做了我认为可以帮助我解决问题的线索。。。但我不确定。我正在使用的asp.net版本的“Machine.config”文件没有指定文章中列出的任何线程值,因此我们默认使用我认为不正确的所有线程值

如果你是我;接下来你会做什么?你认为问题出在哪里

编辑:这是一个截图。当问题发生时,这应该是显而易见的。

编辑:


我想为我们的设置更改这些值。首先有几个问题:

1) 在进行更改后,需要重新启动什么才能使更改生效

2) 对于具有8个物理内核的系统,这些设置是如何设置的

maxconnection = 96
maxIoThreads = 100
maxWorkerThreads = 100
minFreeThreads = 704 
minLocalRequestFreeThreads = 608

您正在谈论的设置是machine.config中
system.web
元素下元素的一部分。对于IIS6,以下各项适用:

通常,您只会发现
autoConfig=“true”
而不是其他元素。自动配置根据您的机器配置设置值-根据推荐值(请参阅文章中的线程解释部分)进行调整,这些值与您提供的链接所看到的值相同。
虽然已过时,但如果您想手动调整这些设置,我认为这是一个极好的资源

另一方面,对于您所服务的负载,我建议您做两件事(如果您还没有尝试过的话)

  • 积极使用输出缓存-即使数据是动态的,缓存30-60秒也可以在负载上提供一定的提升
  • 如果您怀疑某些请求占用了太多线程,请尝试将这些资源移动到不同的应用程序池下(您可以使用具有不同子域的不同网站,也可以使用不同的虚拟目录/应用程序并选择不同的应用程序池)
    • 不好玩

      许多根本原因都有共同的症状,这使得在不弄脏应用程序的情况下很难进行诊断。:)如果暗示了这些步骤,请原谅

      接下来的一些步骤可能是:

      • 查看每个站点的IIS日志,查找以下内容:
        • HTTP响应代码(5xx、4xx、3xx)
        • 请求响应时间
      • 查看Windows事件日志
        • 应用程序池多久循环一次
        • 应用程序错误等
      • 按照@vinayc的建议验证processModel设置,以确保Preference没有“棘手”
      • 安装时,它是一个非常好的工具,可以对内存和崩溃相关问题进行一些基本分析。
        • 这还可以帮助您捕获内存快照,以便稍后进行诊断
        • Tess Ferrandez可以帮助进行记忆捕捉分析
      • 了解每个应用程序池中运行的web应用程序数量
      • 调查使用“网络花园”可能有助于减少受“减速”影响的用户数量
      • 是否启用了病毒扫描程序?它在运行吗?如果是,请核实排除情况
      • 应用程序团队是否可以帮助解决问题?确定他们是否有任何可能有助于诊断问题的自定义应用程序检测
      这种行为是“新”的吗?还是一直都在那里?如果是“new”,您能否跟踪哪些部署可能导致新行为

      对“减速”行为的描述是否可以再次归因于apppool回收和由此产生的应用程序jitting?ala——第一个请求综合征

      查看日志有助于了解站点/应用程序的使用情况,如果您不拥有代码库,这一点尤为重要。是执行某些IIS日志分析(以及其他格式)的优秀工具

      祝你好运


      Z

      我喜欢32位版本的Windows,而喜欢64位版本。虽然64位意味着代码可以比32位消耗更多的内存,但它也意味着机器在一个周期内可以完成32位操作系统两倍的工作量
      autoConfig
      maxIoThreads
      maxWorkerThreads
      minIoThreads
      minWorkerThreads
      requestQueueLimit
      responseDeadlockInterval