runliuv

runliuv@cnblogs

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1.提升System.Net.ServicePointManager.DefaultConnectionLimit

2.提升最小工作线程数

 

.net mvc 在Application_Start(),.net core mvc 在Program.Main ,加入以下代码。

 

if (System.Net.ServicePointManager.DefaultConnectionLimit <= 300)
{
    //DefaultConnectionLimit 桌面系统(如XP,WIN7,WIN11)默认是2,windows server 默认是4。
    //当客户端访问你的程序,你的程序又要访问第三方的HTTP接口,DefaultConnectionLimit 需要调大。
    System.Net.ServicePointManager.DefaultConnectionLimit = 300;
}
int workerThreads;//默认“最小工作线程数”
int completePortsThreads; //默认“最小异步I/O 线程数”
ThreadPool.GetMinThreads(out workerThreads, out completePortsThreads);
int maxWork;//默认“最大工作线程数”
int maxIOT;//默认“最大 IO线程数”
ThreadPool.GetMaxThreads(out maxWork, out maxIOT);

// wantWork 一般来说 50 - 300 就够用了,根据压力测试情况再加大。
int wantWork = 300; 
if (workerThreads < wantWork)
{
    // 最小 IO线程数 值不要超过 默认“最大 IO线程数”,否则会不生效。如果需要调整的更高,先要调高“最大 IO线程数”。
    ThreadPool.SetMinThreads(wantWork, wantWork);
}
ThreadPool.GetMinThreads(out workerThreads, out completePortsThreads);//重新获取一次默认值,看是否正确。
Console.WriteLine("workerThreads:"+ workerThreads.ToString()+ " completePortsThreads:"+ completePortsThreads.ToString());

 

 

------

DefaultConnectionLimit在asp.net mvc4中默认就是int.max ,不需要调整,若是不放心,判断下,然后加大。

DefaultConnectionLimit在asp.net core mvc 中默认比较小,需要加大。

使用ThreadPool.GetMinThreads(out workerThreads, out completePortsThreads); 方法可以得到当前“最小工作线程数”和“最小IO工作线程数”,这两个值默认等于CPU核心数,我这里等于6.

显然,这点并发处理能力是不够的。需要提升,一般50 - 300 就够用。

(最小 IO线程数 值不要超过 默认“最大 IO线程数”,否则会不生效。如果需要调整的更高,先要调高“最大 IO线程数”。)

 

 在代码中加大(.net mvc 在Application_Start(),.net core mvc 在Program.Main ,只要在合适的时机调整即可):

以下是.net core 中运行的实际情况:

 

StringBuilder scLog = new StringBuilder();

            try
            {

                 
                scLog.AppendLine("默认的 System.Net.ServicePointManager.DefaultConnectionLimit:" + System.Net.ServicePointManager.DefaultConnectionLimit.ToString());
                if (System.Net.ServicePointManager.DefaultConnectionLimit <= 300)
                {
                    System.Net.ServicePointManager.DefaultConnectionLimit = 300;
                    scLog.AppendLine("调整后 System.Net.ServicePointManager.DefaultConnectionLimit:" + System.Net.ServicePointManager.DefaultConnectionLimit.ToString());
                }

                int workerThreads;//工作线程数
                int completePortsThreads; //异步I/O 线程数
                ThreadPool.GetMinThreads(out workerThreads, out completePortsThreads);
                string thMin = string.Format("默认的 最小工作线程数{0},最小IO工作线程数{1}", workerThreads, completePortsThreads);
                scLog.AppendLine(thMin);

                int maxT;//最大工作线程数
                int maxIO;//最大IO工作线程数
                ThreadPool.GetMaxThreads(out maxT, out maxIO);
                thMin = string.Format("默认的 最大工作线程数 {0},最大IO工作线程数{1}", maxT, maxIO);
                scLog.AppendLine(thMin);

                int blogCnt = 300;
                if (workerThreads < blogCnt)
                {
                    ThreadPool.SetMinThreads(blogCnt, blogCnt); // MinThreads 值不要超过 (max_thread /2  ),否则会不生效。要不然就同时加大设置max_thread

                    ThreadPool.GetMinThreads(out workerThreads, out completePortsThreads);//确认是否修改成功
                    thMin = string.Format("调整后 最小工作线程数{0},最小IO工作线程数{1}", workerThreads, completePortsThreads);
                    scLog.AppendLine(thMin);
                }

                ThreadPool.GetMaxThreads(out maxT, out maxIO);
                thMin = string.Format("再看一次 最大工作线程数 {0},最大IO工作线程数{1}", maxT, maxIO);
                scLog.AppendLine(thMin);

            }
            catch (Exception ex)
            {
                scLog.AppendLine("index ex:" + ex.Message);
            }

     // mylog           scLog.ToString()

 

 

结果:

默认的 System.Net.ServicePointManager.DefaultConnectionLimit:2
调整后 System.Net.ServicePointManager.DefaultConnectionLimit:300
默认的 最小工作线程数6,最小IO工作线程数6
默认的 最大工作线程数 32767,最大IO工作线程数1000
调整后 最小工作线程数300,最小IO工作线程数300
再看一次 最大工作线程数 32767,最大IO工作线程数1000

其它:
asp.net mvc 也可以在machine.config 中加大。

 

posted on 2019-12-01 11:57  runliuv  阅读(2175)  评论(0编辑  收藏  举报