转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:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG下,先备份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应用也发生了这个问题,最后在

ppRequestQueueLimit改成
1000

maxWorkerThreads="20"改成40

maxIoThreads="20" 改成40

后成功。

转ASP.NET1.1请求队列限制,布布扣,bubuko.com

时间: 2024-11-06 09:21:38

转ASP.NET1.1请求队列限制的相关文章

ASP.Net的工作线程与请求队列

当 ASP.NET 接收针对页的请求时,它从线程池中提取一个线程并将请求分配给该线程. 一个普通的(或同步的)页在该请求期间保留线程,从而防止该线程用于处理其他请求.如果一个同步请求成为 I/O bound(例如,如果它调用一个远程 Web 服务或查询一个远程数据库,并等待调用返回),那么分配给该请求的线程在调用返回之前处于挂起状态. 这影响了可伸缩性,原因是线程池的可用线程是有限的. 这个数字的设置是在 machine.config 的 下述节点的 maxWorkerThreads 属性 <s

修改 ASP.NET 请求队列的限制

查询 ASP.NET 时,服务的请求将通过 Internet Information Services (IIS) 和 ASP.NET 工作进程之间的管道来传递,并且在该管道内排队.(ASP.NET 在自己的进程中运行 - 这一点不同于传统的 ASP,传统的 ASP 与 IIS 服务在同一个进程中运行.)默认情况下,此队列最多可以包含 5,000 个请求.如果请求超过 5,000 个,则用户将收到“503 - 服务不可用”错误,并被拒绝服务. 尽管默认值对于相对数目较少的 Communicato

ASP.NET获取请求的url信息汇总

ASP.NET获取请求的url信息汇总 最近做项目需要处理一个用代码获取当前网站的域名或ip信息的问题,于是尝试了ASP.NET中各种获取url信息的方法,在此总结一下: 在Global.asax文件中的 Application_BeginRequest 方法中,加入以下代码,利用日志文件记录各种方法得到的信息 HttpApplication app = sender as HttpApplication; logger.Debug("Request.ApplicationPath:"

ASP.NET 页面请求超时时间设置 Server.ScriptTimeOut executionTimeout

ASP.NET 页面请求超时时间(页面后台程序执行时间)默认值为 110 秒(在 .NET Framework 1.0 版和 1.1 版中,默认值为 90 秒) 即: Server.ScriptTimeout = 110(HttpServerUtility.ScriptTimeout = 110) System.Web.Configuration.HttpRuntimeSection().ExecutionTimeout.ToString() = 00:01:50(110 秒) 方法一:设置 S

Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))

1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片请求,图片缓存) (2)封装 Response.Listener 和 Response.ErrorListener 回调函数 (3)用法 3.文件夹介绍 3.1 GsonRequset.java 自己定义Gson请求,直接将 Json字符串  实例化为 对象 3.2 VolleyApplicatio

通过请求队列的方式来缓解高并发抢购(初探)

通过请求队列的方式来缓解高并发抢购(初探) 一.背景 在移动互联网高速发展的时代,各种电商平台的抢购业务变得越来越火爆,抢购业务所带来的高并发问题值得我们去探索,主要涉及的方面包括处理和响应速度.数据的一致性等.抢购开放的一瞬间,可能有成千上万的下订单请求发送到服务器去处理,如果只是简单的请求处理响应方式,不做任何处理,导致的结果很可能是很多客户很长时间得不到响应,根本不知道自己是否下订单成功,或者下订单的数量已经超过了商品的数量,这就导致了超发的问题. 二.设计思路 1.用户在下订单之前当然是

iOS网络编程之同步、异步、请求队列 2014-12-7

1. 同步意为着线程阻塞,在主线程中使用此方法会不响应任何用户事件.所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替. - (IBAction)grabURL:(id)sender { NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request star

ASP模拟POST请求异步提交数据的方法

这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限制了GET方式,只能通过POST数据提交,这个时候我们可以通过asp来实现模拟提交post数据,网上有挺多这样的例子的.下面的是我自己写的比较简洁易懂的函数. 首先,需要一个编码设置的函数,因为asp一般为gbk的,而标准的网站现在大都使用utf-8的.所以需要转换. 代码如下: function

【IIS】我所理解的IIS处理ASP.NET页面请求过程

众所周知,一个完整的动态网页的从请求到响应无非包括以下3个步骤: 1.浏览器客户端发出http请求. 2.IIS服务端接受请求. 3.处理请求并输出请求结果到浏览器客户端. 首先,简单的说说我所理解的IIS,它依赖于Windows服务World Wide Web Publish Service的,并依赖于进程w3wp.exe的.也就是说IIS的运行离不开工作进程w3wp.exe,同时每个IIS站点下的应用程序都是被用用程序池进行隔离,应用程序池即w3wp.exe的容器,通过池隔离的机制保证当某个