zoukankan      html  css  js  c++  java
  • ASP.NET线程相关配置

    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() + ":" + " ";

                result += "最大工作线程:" + maxWorkThread + ",最大IO线程:" + maxIOThread + " ";

                result += "最小工作线程:" + minWorkThread + ",最小IO线程:" + minIOThread + " ";

                result += "可用工作线程:" + workThread + ",可用IO线程:" + completeThread + " ";

                result += " ";

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

  • 相关阅读:
    【故障处理】ORA-12162: TNS:net service name is incorrectly specified (转)
    android studio 编程中用到的快捷键
    java时间格式串
    android Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.
    linux安装vmware
    x1c 2017 安装mint18的坑——grub2
    x1c2017 8G版 win linux的取舍纠结记录
    python的try finally (还真不简单)
    kafka+docker+python
    json文件不能有注释
  • 原文地址:https://www.cnblogs.com/mrray/p/3291788.html
Copyright © 2011-2022 走看看