首页 > 其他分享 >异常详细信息: System.Web.HttpException: 服务器太忙

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

时间:2023-11-07 12:05:25浏览次数:41  
标签:Web HTTP 请求 HttpException System 线程 NET 连接

HTTP 双连接限制

HTTP 规范表明,一个 HTTP 客户端与任一服务器最多可以同时建立两个 TCP 连接。这可以防止单个浏览器在浏览某个页面(例如,具有 120 个嵌入的缩略图)时,由于连接请求过多而使服务器负载过重。此时,浏览器将仅创建 2 个连接,然后通过这两个管道开始发送 120 个 HTTP 请求,而不是创建 120 个 TCP 连接并通过每个连接来发送 HTTP 请求。对于中间层,此方法的问题在于,中间层可能会有 50 个同时请求连接的用户。如果不得不为每个用户进行一次 MapPoint .NET Web 服务调用,将会有 48 个用户等待两个管道中的一个空闲下来。

线程池限制
ASP.NET 处理传入的请求的方式是通过一个称为进程线程池的一组线程为其提供服务。正常情况下,请求传入后,池中某个空闲的线程将为其提供服务。这里的问题在于,进程线程池不会创建无数个线程来处理大量的请求。具有最大线程数限制是一件好事,因为如果我们无限地创建线程,计算机上的全部资源将只能用来管理这些线程了。通过限制所能创建的线程数,我们可以把线程管理的系统开销保持在一个可控的水平。如果某个请求传入时线程池中的所有线程都被占用,则该请求将排队等候,在忙线程完成任务后,空闲出来的线程才能处理新请求。此方法实际上比切换到某个新线程更有效,因为不需要在请求之间进行线程切换。但存在的问题是,如果线程的使用效率不高(尤其是在非常忙的 Web 服务器上),则等候的请求队列会变得很大。

考虑一下从 ASP.NET 页面进行 Web 服务调用的情况。如果进行同步调用,则正在运行的线程将被阻塞,直到 Web 服务调用完成为止。在调用期间,线程无法进行任何其他活动。它无法处理其他请求,只能等待。如果某个单处理器计算机上具有默认的工作线程数 20,则只需 20 个同时进行的请求即可用完全部线程,以后的请求必须排队等候。

改善问题
该问题的某些方面可以通过对环境进行某些配置设置来改善。我们看一下可用于改善该问题的某些配置设置。

maxconnections
连接到 Web 资源的默认双连接限制可以通过一个名为 connectionManagement 的配置元素来控制。connectionManagement 设置允许您添加要让其采用非默认连接限制的站点的名称。可以将以下内容添加到典型的 Web.config 文件中,将您连接的所有服务器的连接限制默认值增加到 40。

<configuration>   
  <system.net>    
    <connectionManagement>    
      <add address="*" maxconnection="40" />    
    </connectionManagement>    
  </system.net>   <system.web>


     ...应当注意的是,对本地计算机的连接数量从来都没有限制,因此,如果是连接到本地主机,则此设置无效。

maxWorkerThreads 和 minFreeThreads
如果收到 HTTP 503 错误(“服务暂时过载”),则表明线程池中的线程已全部占用,并且请求队列也已超出最大值(appRequestQueueLimit 的默认设置为 100)。对于 IIS 5.0 安装,可以简单地增加线程池的大小。而对于 IIS 6.0 安装(与 IIS 5.0 不兼容),这些设置将无效。

maxWorkerThreads 和 maxIoThreads 分别控制工作线程数以及处理新提交的 ASP.NET 请求的线程数。这些设置需要在您的 Machine.config 中进行配置,它们将影响您计算机上运行的所有 Web 应用程序。maxWorkerThreads 是 Machine.config 中的 processModel 元素的一部分,并且您在查看后会发现,该设置的默认值为每个处理器 20 个线程。

minFreeThreads 设置可以在 Machine.config 中进行配置,或者在您的应用程序的 Web.config 文件中的 httpRuntime 元素下进行配置。该设置的作用是,当空闲的线程数低于所设置的限制时,将禁止使用线程池中的线程来处理传入的 HTTP 请求。如果您需要某个进程线程池线程完成挂起的请求,这会很有用。如果所有的线程都被用来处理传入的 HTTP 请求,并且这些请求在等待另一个线程完成其处理,那么就会进入死锁状态。例如,如果您正在从 ASP.NET 应用程序进行对某个 Web 服务的异步 Web 服务调用,并且在等待回调函数完成该请求,就会出现这种情况。因为回调必须在进程线程池中的空闲线程上进行。如果查看一下您的 Machine.config,将会注意到 minFreeThreads 设置的默认值为 8,如果工作线程池的限制为 20,则该默认值还可以满足需要,但是,如果线程池的大小增加到 100,该默认值就太小了。

应当注意的是,如果您的 ASP.NET 应用程序对本地计算机进行 Web 服务调用,则线程池限制的问题将被激化。例如,我为此专栏创建的测试应用程序调用与 ASPX 页面同处一台计算机上的 Web 服务。因而,对于阻塞的调用,一个线程被同时用于 ASPX 页面和 ASMX Web 服务请求。这有效地使 Web 服务器处理的同时请求数增加了一倍。在同时进行两个 Web 服务请求(使用异步 Web 服务调用)的情况下,我们最终使同时进行的请求数增加了两倍。为避免在回调本地计算机时出现此类问题,您应当考虑您的应用程序的体系结构,使其简单地直接从 ASPX 代码来执行 Web 方法中的代码。

http://www.uml.org.cn/net/net110405.htm

machine.config文件一般在<WINDOWS安装目录>\Microsoft.NET\Framework\对应版本号\CONFIG\
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG

修改对应站点归属应用程序池的“请求队列限制” ,这个的默认值是4000,  改为10000

maxWorkerThreads="20"  改为 "40"
maxIoThreads="20"  改为 "40"
appRequestQueueLimit="100"  改为 "400"

有可能连接数超了。修改一下IIS数据库文件。
%windir%\system32\inetsrv\MetaBase.xml
修改AspRequestQueueMax值,服务器配置高的话,可以加多多的。



标签:Web,HTTP,请求,HttpException,System,线程,NET,连接
From: https://blog.51cto.com/emanlee/8229411

相关文章

  • 如何选择 Web 服务器性能计数器
    有数百个您可以从中选择要监视服务器活动的计数器。下面的列表描述了可用于监视您的Web服务器上负载,并为每个提供理想的值的计数器。收起该表格展开该表格对象或计数器理想的值内存每秒页0到20(如果通过80,表示问题)内存可用的字节数至少4兆字节(MB)内存提交的字节数不会......
  • IBM System x3400 怎么启动到可以安装?
    IBM服务器安装Windows操作系统的前提条件:IBMServerGuide光盘和Windows光盘。 IBMSystemX3400理论上不支持WindowsServer2000任何一个版本的安装(主要是因为ServerGuide光盘里面没有相关的驱动,在系统安装初始阶段无法加载阵列卡控制器的驱动)。但是你可以使用一个外置的USB......
  • Web_php_include
    常用伪协议用法:1.php伪协议用法:(大小写都可以)php://input,用于执行php代码,需要post请求提交数据。php://filter,用于读取源码,get提交参数。?a=php://filter/read=convert.base64/resource=xxx.php需要开启allow_url_fopen:php://input、php://stdin、php://memory、php://temp不......
  • 开源组态软件有哪些?国产常用 Web 组态软件
    组态软件最早出现在80年代初,那时是基于DOS系统开发的,当时的主要产品是Onspec、Paragon等;进入90年代,主要是基于WINDOWS系统的组态软件,如Intouch、Kingview、Ifix等;随着物联网、大数据等技术的高速发展,当下最热的组态软件大都基于H5的Web组态软件。非开源组态软件Sovit2DSovit......
  • webrtc 低通滤波器
     #include"low_pass_filter.h"  doubleprev_output=0.0;doubleprev_input=0.0;  //去噪 WebRtcNsx_Process(webrtc_nsx,&g_aecmAudio,1,&g_ns); if(WebRtcAgc_Process(webrtc_agc,&g_ns,1,160,&pBuff,in_mic_......
  • web.xml 4.0版本
    现在通过idea创建javaee项目都是走的Jakarta,web.xml默认5.0版本起,但有的时候还是会用到4.0版本,这里给自己留个记录<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/......
  • FastAPI搭建Web服务器
    FastAPI搭建Web服务器1、基于FastAPI之web站点开发#第一步:导入模块fromfastapiimportFastAPI#导入响应报文Response模块fromfastapiimportResponse#导入服务器uvicorn模块importuvicorn#第二步:创建FastAPI对象app=FastAPI()#第三步:通过@app路由装饰器收......
  • javaweb-- Mybatis参数传递
     Mybatis提供了ParamNameResolver类进行封装 传入多个参数时,mybatis会将参数封装成Map集合map.put("arg0",参数值1)map.put("param1",参数值1)map.put("arg1",参数值2)map.put("param2",参数值2) ......
  • websec / passwd dict / passwd dict / pwd dict / mima
    s 序号项目描述备注11400多万个弱口令密码字典下载https://www.perfcode.com/p/password-dictionary.html该密码字典包含1400多万个密码,包含弱密码、常用密码、短密码等组合,适合暴力猜解使用;该文件来源于Kali系统下的密码字典文件;如果你使用Kali系统,该密码字典......
  • JavaScript--Web API
    DOMDOM(DocumentObjectModel——文档对象模型)是用来呈现以及与任意HTML或XML文档交互的API。DOM是浏览器提供的一套专门用于操作网页内容的功能作用:开发网页内容特效和实现用户交互DOM树DOM节点节点是文档树的组成部分,每一个节点都是一个DOM对象,主要分为......