zoukankan      html  css  js  c++  java
  • IIS 高并发的相关配置

    前言:

      随着业务量的增加,服务器流量的增长增长了好多,高峰期会出现 503 的错误,IIS 对请求数的配置默认是 1000,无法满足现状的需求;

      

      需要收集性能数据如下:

      1、Windows性能监视器,该应用程序池进程的线程和处理队列

      2、问题重现时的进程dump

      这是请求到达IIS后遇到的第一个队列,HTTP.sys收到请求后会将请求放入对应的应用程序池队列,这样可以减少上下文的切换。

      需要注意的是应用程序池队列虽然是给w3wp进程用的,但它存在于http.sys的内存区(http.sys是一个运行于kernel-mode的设备驱动程序)。

      如果把 http.sys 比作一块网卡,那应用程序池队列相当于网卡的缓冲区。

      w3wp 从应用程序池队列中取出请求后,接下来就是从CLR线程池中捞出一个CLR线程处理请求,如果池中空无一线,就会将请求放在CLR线程池队列中。

      检测两个队列的情况,可以使用Windows性能监视器

      Http Service Request QueuesCurrentQueueSize

      Http Service Request QueuesArrivalRate

      ASP.NET v4.0.30319Requests Queued

      ASP.NET v4.0.30319Requests Current

    一、应用程序池(Application Pool –> 高级设置  –> 队列长度)

    • General->Queue Length设置为65535(队列长度所支持的最大值,缺省值为1000)
    • Recycling->Regular Time Interval设置为0(取消应用程序池固定时间间隔的自动回收,缺省值为1740)
    • Process Model->Idle Time-out设置为0(取消应用程序池因为空闲超时而关闭,缺省值为20分钟)
     1 <!-- 调大应用程序池的请求队列 -->
     2 C:WindowsSystem32inetsrv>appcmd set apppool webform -queueLength:65535
     3 <!-- 取消固定时间间隔的回收 -->
     4 C:WindowsSystem32inetsrv>appcmd set apppool webform -recycling.periodicRestart.time:00:00:00
     5 <!-- 设置指定时间点的回收 -->
     6 C:WindowsSystem32inetsrv>appcmd set apppool webform /+recycling.periodicRestart.schedule.[value='04:15:00']
     7 <!-- 取消空闲超时的进程关闭 -->
     8 C:WindowsSystem32inetsrv>appcmd set apppool webform -processModel.idleTimeout:00:00:00
     9 <!-- 开启所有回收事件的日志 -->
    10 C:WindowsSystem32inetsrv>appcmd set apppool webform -recycling.logEventOnRecycle:"Time, Requests, Schedule, Memory, IsapiUnhealthy, OnDemand, ConfigChange, PrivateMemory"

      IIS  (C:WindowsSystem32inetsrvconfigapplicationHost.config)

       1、设置命令:

    c:windowssystem32inetsrvappcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000

           2、设置结果:

    <!-- IIS并发请求数 --> 
    <serverRuntime appConcurrentRequestLimit="100000" />

      .NET Framework & ASP.NET  (C:WindowsMicrosoft.NETFramework64v4.0.30319Configmachine.config 和 WebAppRootweb.config)

    <!-- .NET Framework 进程模型 配置,最大工作线程(真实的线程数 = 此值 * 逻辑CPU数) --> 
    <processModel enable="true" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" minIoThreads="50" />
    
    <!-- ASP.NET 请求处理队列 --> 
    <httpRuntime appRequestQueueLimit="100000"/>

    二、网络协议

      0、是否是连接数达到了上限,win2008以前的版本,对半开连接数是有限制的,但是从win7、win vista、win2008之后就关闭了该项限制

           1、将最大连接数设置为10万

      reg add HKLMSystemCurrentControlSetServicesHTTPParameters /v MaxConnections /t REG_DWORD /d 100000
      reg add HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesHTTPParameters /v MaxFieldLength /t REG_DWORD /d 32768
      reg add HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesHTTPParameters /v MaxRequestBytes /t REG_DWORD /d 32768 

           2、修改TCP MaxUserPort限制(由默认5000改为65534)

        reg add HKLMSYSTEMCurrentControlSetServicesTcpipParameters /v MaxUserPort /t REG_DWORD /d 65534 

           3、 net stop http  & net start http & iisreset  (干脆直接重启计算机)

      转载自:

      压力测试报出503错误---ASP.NET支持大并发的相关配置

      云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析

  • 相关阅读:
    node
    github
    [模块] pdf转图片-pdf2image
    python 15 自定义模块 随机数 时间模块
    python 14 装饰器
    python 13 内置函数II 匿名函数 闭包
    python 12 生成器 列表推导式 内置函数I
    python 11 函数名 迭代器
    python 10 形参角度 名称空间 加载顺序
    python 09 函数参数初识
  • 原文地址:https://www.cnblogs.com/loongsoft/p/7602470.html
Copyright © 2011-2022 走看看