• 转ASP.NET1.1请求队列限制


        在教务web的选课的维护中,经常面临asp.net1.1报错,在客户端跳转到用户自定义页面,在服务器端可以看到如下错误信息:

    “/”应用程序中的服务器错误。


    服务器太忙

    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

    异常详细信息: System.Web.HttpException: 服务器太忙

    源错误: 

    执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

    堆栈跟踪: 

    [HttpException (0x80004005): 服务器太忙]
       System.Web.HttpRuntime.RejectRequestInternal(HttpWorkerRequest wr) +146
    

    版本信息: Microsoft .NET Framework 版本:1.1.4322.2443; ASP.NET 版本:1.1.4322.2460  
     
        究其深理,发现是由于asp.net 1.1中将每个Web App的Request Queue Limit默认设为了100,在选课这种大量并发的特殊时间,自然难以抵御。需要修改Machine.config中的设置。在C:WINDOWSMicrosoft.NETFrameworkv1.1.4322CONFIG下,先备份machine.config再修改,找到如下httpRuntime部分:
    <httpRuntime 
           executionTimeout="90"
           maxRequestLength="4096"
           useFullyQualifiedRedirectUrl="false"
           minFreeThreads="8"
           minLocalRequestFreeThreads="4"
           appRequestQueueLimit="100"
           enableVersionHeader="true"
    />
        看到appRequestQueueLimit为100,可以根据cpu数量和性能改为500,700,900或更大,但不能简单的将此值设置很大,因为工作进程会为每个应用程序维护一个appRequestQueue,Queue的长度固定,盲目设大将造成资源浪费与性能降低,实际使用中可以发现部分性能较差的虚拟机虽然不频繁出现报错,但在当时CPU已经比较高的情况下,该web的整体响应速度会非常慢。
        另看到一个说明,下次选课前可以调试对比下。即平时我们所用iis6都启用了应用程序池,该方式为隔离模式,而非本地模式。在非隔离模式下,machine.config中另一部分设置会生效,找到:
    <processModel
           enable="true"
           timeout="Infinite"
           idleTimeout="Infinite"
           shutdownTimeout="0:00:05" 
           requestLimit="Infinite" 
           requestQueueLimit="5000" 
           restartQueueLimit="10"
           memoryLimit="60" 
           webGarden="false"
           cpuMask="0xffffffff"
           userName="machine"
           password="AutoGenerate"
           logLevel="Errors"
           clientConnectedCheck="0:00:05"
           comAuthenticationLevel="Connect"
           comImpersonationLevel="Impersonate"
           responseDeadlockInterval="00:03:00" 
           maxWorkerThreads="20"
           maxIoThreads="20"
    />
        其中的requestQueueLimit,maxWorkerThreads,maxIoThreads适当改的大些,可能会比上面的修改有更好的效果。
     公司的一个web应用也发生了这个问题,最后在
    appRequestQueueLimit改成 1000
     maxWorkerThreads="20"改成40
           maxIoThreads="20" 改成40
    后成功。
     
     
     
     
  • 相关阅读:
    IOS 使用CoreText实现表情文本URL等混合显示控件
    IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题)
    IOS 多级列表展开控件
    IOS 五星评分控件
    ios实现类似魔兽小地图功能 在
    Cocoa Foundation框架学习笔记 - NSCalendar
    lua通过bunlde读注意事项
    unity手游之聊天SDK集成与使用二
    unity手游之聊天SDK集成与使用一
    unity3d引擎程序员养成
  • 原文地址:https://www.cnblogs.com/tiantianne/p/3698964.html
Copyright © 2020-2023  润新知