ASP.NET线程相关配置
1、(maxWorkerThreads CPU逻辑数量)-minFreeThreads
比如2个CPU默认配置maxWorkerThreads=100,minFreeThreads=176,则最大只能有24个工作线程。(这里不管 <system.>
<connectionManagement>
<add address="" maxconnection="8" />
</connectionManagement>
</system.>这个配置的值,经过测试,不管这里的maxconnection为多少,最终都是从上面的计算公式计算出来的)
2、maxconnection,这个值是每秒可以支持的线程数。(但实际每秒可以并行运行的线程为(maxWorkerThreads CPU逻辑数量)-minFreeThreads的结果),一般要求支持并发量,每个并发请求都很耗时的情况下,就需要设置该值为对应的并发量(有这么多线程来处理),但线程多了切换也很耗服务器资源,实际情况往往不一定请求都很耗时,所以根据实际情况调整。
3、maxWorkerThreads是最大工作线程,默认100我觉得再非高并发下还是可以
4、minWorkerThreads是最小工作线程,由于托管线程启动比较耗时,根据实验结果40秒启动了18个线程,大概接近官方说的每秒接近2个。由于线程开销比较耗时,可以初始化到正常情况下的最低支持并发数量。比如我们平台白天最少有10个并发,则可以设置最小线程为5(2个CPU),或者服务端可能会遇到瞬间的超大并发量的请求,则可设置默认最小工作线程更大一点,可以快速处理请求。minWorkerThreads只对递增线程有影响,不影响稳定后的并发量。
5、最小空闲线程minFreeThreads参数的配置,有的官方资料建议配置成88N的数量(如果maxWorkerThreads为100的情况),因为说为了留足够的空闲线程给系统用,经过测试,发现高压下,缺空闲线程真的空闲起来了,根本没有用,我觉得应该把这个值设置小一点,比如设置为80(maxWorkerThreads为100的情况),就会留下1002-80=120个最大连接,在高压下就能建立120个线程,速度和效率会很快。
注意点
1、CPU逻辑数量按照物理CPU数量,如果CPU是超线程(多核)会再乘以2
2、同一时间可处理量不代表每秒可处理量,比如同一时间可以处理20个,可能每秒能处理200个,因为每个请求只要0.1秒。
3、注意配置节点中processModel里的maxWorkerThreads、maxIoThreads和minWorkerThreads、minIoThreads都只配置单CPU逻辑数量的值,计算时会自动乘以CPU逻辑数量。
4、配置节点包括
System.web节点下
<processModel autoConfig="false"
maxWorkerThreads = "100"
maxIoThreads = "100"
minWorkerThreads = "20"
minIoThreads = "20"
/>
<httpRuntime
minFreeThreads="100"
minLocalRequestFreeThreads="100"
/>
System.web同级节点下
<system.>
<connectionManagement>
<add address="" maxconnection="8" />
</connectionManagement>
</system.>
5、利用到的获取参数代码
string result = string.Empty;
int maxWorkThread = 0;
int maxIOThread = 0;
int minWorkThread = 0;
int minIOThread = 0;
int workThread = 0;
int pleteThread = 0;
ThreadPool.GetMaxThreads(out maxWorkThread, out maxIOThread);
ThreadPool.GetMinThreads(out minWorkThread, out minIOThread);
ThreadPool.GetAvailableThreads(out workThread, out pleteThread);
result = DateTime.Now.ToString() + "" + "\r\n";
result += "最大工作线程" + maxWorkThread + ",最大IO线程" + maxIOThread + "\r\n";
result += "最小工作线程" + minWorkThread + ",最小IO线程" + minIOThread + "\r\n";
result += "可用工作线程" + workThread + ",可用IO线程" + pleteThread + "\r\n";
result += "\r\n";
(把result记录下来,没有用StringBuilder,临时用的)
网络推广网站推广转载http://lawson.blogs./
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程