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

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

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

当处于内核模式的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 ,可以预防一些突发流量。

Original: https://www.cnblogs.com/7rhythm/p/9964543.html
Author: 鬼柒
Title: .NET线程池最大线程数的限制-记一次IIS并发瓶颈

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/642542/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 耗时几个月,终于找到了JVM停顿十几秒的原因

    原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介 最近我们系统出现了一些奇怪的现象,系统每隔几个星期会在大半夜重启一次,分析过程花费了很长时间,…

    技术杂谈 2023年7月25日
    091
  • 知识图谱读书笔记4

    posted @2021-10-05 11:20 DarJeely 阅读(18 ) 评论() 编辑 Original: https://www.cnblogs.com/Jeely/…

    技术杂谈 2023年5月31日
    077
  • IDEA一键部署SpringBoot项目到服务器

    1. 安装Alibaba Cloud Toolkit插件 2. 配置部署环境 2.1 为本次部署设置一个名字 2.2 选择被部署文件的生成方式 IDEA提供了三种方式: Maven…

    技术杂谈 2023年7月24日
    072
  • Go sync.Map

    读写共享map 执行: fatal error: concurrent map writes 问题:内置的map不是并发安全的,要为map加锁来保证并发的安全性了 特点:开箱即用且…

    技术杂谈 2023年5月31日
    081
  • 520,解锁开发者的专属浪漫

    众所周知,提起程序员, 大家肯定清一色地想起穿着格子衬衫的直男直女。 可殊不知,程序员也有专属他们的浪漫。 在即将到来的”520″这个特殊的日子里, 让我们…

    技术杂谈 2023年5月30日
    095
  • 职场感悟

    ============================================================================== 本博客已经废弃,不在维…

    技术杂谈 2023年6月1日
    091
  • TCP三次握手四次挥手

    最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,…

    技术杂谈 2023年7月24日
    090
  • [转]EVE-NG中使用SecureCRT合并tab标签

    在EVE-NG中双击设备使用SecureCRT对设备进行调试连接时,会出现每次连接不同设备时都会打开一个新的SecureCRT窗口,而不是在一个窗口中添加一个新的标签页,这就会导致…

    技术杂谈 2023年7月24日
    072
  • JavaScript学习

    一、什么是JavaScript JavaScript世界上最流行的脚本语言 一个合格的后端人员,必须精通JavaScript 二、快速入门 2.1、引入JavaScript 内部引…

    技术杂谈 2023年6月21日
    0107
  • 电商WMS介绍

    其他竞品 今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管管,团队建设 有参考作用 , 您可能感兴趣的文章: 如有想了解更多软…

    技术杂谈 2023年6月1日
    096
  • 你不得不知的python apply()

    大家好,我是小寒 原文链接 今天给大家带来一篇 如何在 pandas 上使用 apply 方法,如果觉得不错,欢迎关注起来。 本文的内容主要如下: 在 Pandas Series …

    技术杂谈 2023年7月25日
    071
  • 快速排序?

    <span>function <span>quickSort (arr) {<br> <span>if (arr.length &l…

    技术杂谈 2023年5月31日
    093
  • 通过Go语言创建CA与签发证书

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月25日
    068
  • php的isset函数相关问题

    一、总结 如果已经使用unset() 释放了一个变量之后,再通过isset() 判断将返回FALSE。 若使用isset() 测试一个被设置成NULL 的变量,将返回FALSE。 …

    技术杂谈 2023年5月31日
    064
  • UOJTestRound#2社论

    模拟赛 C, D 出的 UTR 题,,, 开始复读官方题解 /oh/oh/oh 魔怔码风见谅 QwQ A. 题目排列顺序 给一个序列 ({f_n}),重排标准排列 (\pi),使得…

    技术杂谈 2023年7月24日
    065
  • 基于知名微服务框架go-micro开发gRPC应用程序

    go-micro是golang的一个微服务框架。 go-micro各个版本之间的兼容性问题一直被诟病,前几年go-micro更是分化出了两个分支: 一个延续了go-micro,只不…

    技术杂谈 2023年7月11日
    0104
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球