• IIS并发瓶颈线程数的限制


    .NET线程池最大线程数的限制-记一次IIS并发瓶颈

    https://www.cnblogs.com/7rhythm/p/9964543.html

    .NET ThreadPool 最大线程数的限制

    IIS并发瓶颈,有几个地方,IIS线程池的最大队列数,工作进程数,最大并发数。这些这里就不展开。主要是最近因为过度使用Task 导致的线程数占用过多,所以实验了一下 .net线程池 的限制,分享一下。

    注意IIS线程池与.NET线程池不是同一个东西,下面详解。

    W3 Thread Pool(W3TP)

    当处于内核模式的http.sys接收到来自用户的请求之后,会将请求放入队列中。那处于用户模式的w3wp进程如何从内核模式的队列中取出请求呢?

    w3wp中有专门干这个的——w3dt+w3tp。

    当请求被w3tp通过w3dt从http.sys的队列中取出来后,接下来的工作就会转交给ASP.NET,线程池——.NET Thread Pool。

    为了检验.net 线程池 最大线程数的限制,在MVC中新增一个Action 如下
    img_name
    每个task sleep 1s ,这样线程池就会被占用最多20W条线程。

    设置.net线程池 的配置文件位置

    C:WindowsMicrosoft.NETFrameworkv4.0.30319Configmachine.config

    64位系统:

    C:WindowsMicrosoft.NETFramework64v4.0.30319Configmachine.config

    找到这个节点 processModel

    设置maxWorkerThreads =20

    autoConfig=false (win10默认是true)
    img_name
    访问地址:/home/TestTaskLimitCount 时

    使用工具集 SysinternalsSuite procexp64.exe 查看系统进程的详细信息

    看到W3WP.EXE 这里的总进程数卡在100左右,因为我这里的4个CPU,所以maxWorkerThreads *CPUCOUNT =80 另外的27条线程可能是IIS线程池里的。

    然后当我们同时访问该站点其他URL时,全部都在一直在等待了。
    img_1
    OK,重新改为
    img_l
    maxWorkerThreads =200

    这个时候重新启动站点,运行/home/TestTaskLimitCount 时,看到进程数很快累加到400-500之间,这个时候线程池并没有被用满,只是有些Task任务结束后丢回线程池后又被重新启用。

    同时再次访问一下该站点其他URL,发现虽然加载速度稍有缓慢,但是OK没问题的。
    img_h
    这个值(WorkerThreads)最好根据机器性能自行配置,一般100左右,minWorkerThreads 也很重要,因为开启线程的速度其实还挺慢的,每秒可以开启几条而已,所以预先设置好minWorkerThreads,可以预防一些突发流量。

    
     <processModel autoConfig="true"/>
    
    

    修改

    
     <processModel autoConfig="false" maxWorkerThreads="200" minWorkerThreads="100"  requestQueueLimit="100000"/>
    
    

    修改windows服务器注册表中TCP连接限制,可达到10万连接请求,大内存情况下。

  • 相关阅读:
    Android PopupWindow显示位置和显示大小
    线性回归与梯度下降
    nginx启动过程分析
    项目管理学习笔记之三.绩效分析
    会计总论读书笔记
    电子书阅读及工具
    mybatis-mysql小优化
    List去重
    JAVA8之lambda表达式详解,及stream中的lambda使用
    linux部署mongodb及基本操作
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/9993593.html
Copyright © 2020-2023  润新知