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


    项目反馈报出503错误,需要收集性能数据如下:

    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分钟)
    <!-- 调大应用程序池的请求队列 -->
    C:WindowsSystem32inetsrv>appcmd set apppool webform -queueLength:65535
    
    <!-- 取消固定时间间隔的回收 -->
    C:WindowsSystem32inetsrv>appcmd set apppool webform -recycling.periodicRestart.time:00:00:00
    
    <!-- 设置指定时间点的回收 -->
    C:WindowsSystem32inetsrv>appcmd set apppool webform /+recycling.periodicRestart.schedule.[value='04:15:00']
    
    <!-- 取消空闲超时的进程关闭 -->
    C:WindowsSystem32inetsrv>appcmd set apppool webform -processModel.idleTimeout:00:00:00
    
    <!-- 开启所有回收事件的日志 -->
    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"/>

    网络协议

          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  (干脆直接重启计算机)

  • 相关阅读:
    HDU5597/BestCoder Round #66 (div.2) GTW likes function 打表欧拉函数
    HDU5596/BestCoder Round #66 (div.2) 二分BIT/贪心
    HDU 5596/BestCoder Round #66 (div.2) GTW likes math 签到
    BZOJ 1877: [SDOI2009]晨跑 费用流
    BZOJ 1452: [JSOI2009]Count 二维树状数组
    BZOJ 1143 1143: [CTSC2008]祭祀river 最长反链
    Codeforces Round #335 (Div. 2) D. Lazy Student 贪心
    Codeforces Round #335 (Div. 2) C. Sorting Railway Cars 连续LIS
    Codeforces Round #335 (Div. 2) A. Magic Spheres 模拟
    UVALive 6187 Never Wait for Weights 带权并查集
  • 原文地址:https://www.cnblogs.com/zhaoguan_wang/p/5848885.html
Copyright © 2020-2023  润新知