当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET线程相关配置

ASP.NET线程相关配置

2017年12月12日  | 移动技术网IT编程  | 我要评论

廉晶雅个人资料,老人网,黯淡的复仇天使

1、(maxworkerthreads * cpu逻辑数量)-minfreethreads

比如2个cpu默认配置maxworkerthreads=100,minfreethreads=176,则同时最大只能有24个工作线程。(这里不管  <system.net>

    <connectionmanagement>

      <add address="*" maxconnection="8" />

    </connectionmanagement>

 </system.net>这个配置的值,经过测试,不管这里的maxconnection为多少,最终都是从上面的计算公式计算出来的)

 

2、maxconnection,这个值是每秒可以支持的线程数。(但实际每秒可以并行运行的线程为(maxworkerthreads * cpu逻辑数量)-minfreethreads的结果),一般要求支持并发量,每个并发请求都很耗时的情况下,就需要设置该值为对应的并发量(有这么多线程来处理),但线程多了切换也很耗服务器资源,实际情况往往不一定请求都很耗时,所以根据实际情况调整。

 

3、maxworkerthreads是最大工作线程,默认100我觉得再非高并发下还是可以

 

4、minworkerthreads是最小工作线程,由于托管线程启动比较耗时,根据实验结果:40秒启动了18个线程,大概接近官方说的每秒接近2个。由于线程开销比较耗时,因此可以初始化到正常情况下的最低支持并发数量。比如我们平台白天最少有10个并发,则可以设置最小线程为5(2个cpu),或者服务端可能会遇到瞬间的超大并发量的请求,则可设置默认最小工作线程更大一点,可以快速处理请求。minworkerthreads只对递增线程有影响,不影响稳定后的并发量。

 

5、最小空闲线程minfreethreads参数的配置,有的官方资料建议配置成88*n的数量(如果maxworkerthreads为100的情况),因为说为了留足够的空闲线程给系统用,但是经过测试,发现高压下,缺空闲线程真的空闲起来了,根本没有用,因此我觉得应该把这个值设置小一点,比如设置为80(maxworkerthreads为100的情况),就会留下100*2-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.net>

    <connectionmanagement>

      <add address="*" maxconnection="8" />

    </connectionmanagement>

 </system.net>

5、利用到的获取参数代码:

            string result = string.empty;

            int maxworkthread = 0;

            int maxiothread = 0;

            int minworkthread = 0;

            int miniothread = 0;

            int workthread = 0;

            int completethread = 0;

            threadpool.getmaxthreads(out maxworkthread, out maxiothread);

            threadpool.getminthreads(out minworkthread, out miniothread);

            threadpool.getavailablethreads(out workthread, out completethread);

 

            result = datetime.now.tostring() + ":" + "\r\n";

            result += "最大工作线程:" + maxworkthread + ",最大io线程:" + maxiothread + "\r\n";

            result += "最小工作线程:" + minworkthread + ",最小io线程:" + miniothread + "\r\n";

            result += "可用工作线程:" + workthread + ",可用io线程:" + completethread + "\r\n";

            result += "\r\n";

(把result记录下来,没有用stringbuilder,临时用的)

转载:http://lawson.cnblogs.com/

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网