.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 如下



每个task sleep 1s ,这样线程池就会被占用最多20W条线程。

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

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

64位系统:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

找到这个节点 processModel

设置maxWorkerThreads =20

autoConfig=false (win10默认是true)



访问地址:/home/TestTaskLimitCount 时

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

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

然后当我们同时访问该站点其他URL时,全部都在一直在等待了。



OK,重新改为



maxWorkerThreads =200

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

同时再次访问一下该站点其他URL,发现虽然加载速度稍有缓慢,但是OK没问题的。



这个值(WorkerThreads)最好根据机器性能自行配置,一般100左右,minWorkerThreads 也很重要,因为开启线程的速度其实还挺慢的,每秒可以开启几条而已,所以预先设置好minWorkerThreads,可以预防一些突发流量。


<processModel autoConfig="true"/>

修改


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

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

IIS并发瓶颈线程数的限制的更多相关文章

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

    .NET ThreadPool 最大线程数的限制 IIS并发瓶颈,有几个地方,IIS线程池的最大队列数,工作进程数,最大并发数.这些这里就不展开.主要是最近因为过度使用Task 导致的线程数占用过多, ...

  2. IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的

    IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫" ...

  3. 你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数 吗?

    原文链接:http://www.cnblogs.com/yinhaichao/p/4060209.html?utm_source=tuicool&utm_medium=referral 一般购 ...

  4. 转载:IIS 之 连接数、并发连接数、最大并发工作线程数、队列长度、最大工作进程数

    一.IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数”. 客户请求的连接内容包括: [ ...

  5. IIS 之 连接数、并发连接数、最大并发工作线程数、队列长度、最大工作进程数

    一.IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数”. 客户请求的连接内容包括: [ ...

  6. IIS:连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解

    Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务.最初是Windows NT版本的可选 ...

  7. IIS最大并发连接数 = 队列长度 + IIS最大并发工作线程数

    深入理解IIS的多线程工作机制   首先让我们来看看IIS里面的这2个数字:最大并发连接数,队列长度.先说这2个数字在哪里看. 最大并发连接数:在IIS中选中一个网站,右键网站名称,在右键菜单中找到并 ...

  8. IIS连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解

    IIS:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数详解 iis性能指标的各种概念:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池 ...

  9. 一个使用高并发高线程数 Server 使用异步数据库客户端造成的超时问题

    现象 今天在做一个项目时, 将 tomcat 的 maxThreads 加大, 加到了 1024, tomcat 提供的服务主要是做一些运算, 然后插入 redis, 查询 redis, 最后将任务返 ...

随机推荐

  1. shell基本认识

    shell基本认识 bash # echo $BASH /bin/bash 第一个shell脚本first_shell.sh #!/bin/bash echo "Hello world!&q ...

  2. 关于localStorage

    localStorage 是 HTML5 本地存储的 API,使用键值对的方式进行存取数据,存取的数据只能是字符串.不同浏览器对该 API 支持情况有所差异,如使用方法.最大存储空间等. 使用方法 设 ...

  3. [PostgreSql]PostgreSql调用函数及用IF EXISTS判断表是否存在

    1.创建一个函数function1 -- FUNCTION: public.function1(character varying, integer) -- DROP FUNCTION public. ...

  4. 微信小程序UI------实现携程首页顶部的界面(弹性布局)

    今天写了一个携程界面的UI,利用H5的弹性盒子来实现,学过H5弹性盒子的,来看是比较方便的,因为CSS代码都差不多. 可以看看这篇博客 快速使用CSS 弹性盒子 效果图如下: 主要是携程首页的四个模块 ...

  5. 使用VMware出现的各种问题

    ifconfig命令无效 解决办法:yum install net-tools ping不通 cd /etc/sysconfig/network-scripts ls查看所有文件名称,找到ifcfg- ...

  6. 大白话,讲编程之《ES6系列连载》汇总

    如果你经历过2,3年前的前端开发,你一定感受过兼容IE6,7的痛苦,一定用过网页三剑客的dreamweaver编写html,面试的时候面试官一定会问你:会用PS切图吗? 刚开始的时候你发现,web前端 ...

  7. Neutron二层网络服务实现原理

    网络 ​ 网络(network)是一个隔离的二层网段,类似于物理网络世界中的虚拟 LAN (VLAN).更具体来讲,它是为创建它的租户而保留的一个广播域,或者被显式配置为共享网段.端口和子网始终被分配 ...

  8. Qt界面(控件)相关设计

    (转自:http://blog.chinaunix.net/uid-25799257-id-600157.html) 引言  最近在做数据库相关课程设计,所以就借此机会,先熟悉一下Qt的一些编程,同时 ...

  9. bootstrap 获得轮播中的索引 getActiveIndex

    今天想用bootstrap做一个轮播,当轮播滚到每张图的时候,在页面下面就显示相对应的内容,那么问题来了:我肯定需要知道当前活动(显示图片)的索引号,那么bootstrap的轮播组件要怎么获得这个索引 ...

  10. qml自定义带文字的button tabbutton

    https://blog.csdn.net/u014416260/article/details/54579480