.NET HTTP请求大量超时原因之一可能是它
曾经在一个夜晚,老D抓耳挠腮百思不得其解,为什么调对方接口,并发数上来了会出现大量的超时,年轻的老D以为是对方的接口扛不住。
但,还是得解决问题。老D在不断查阅资料中发现.Net机制中对http请求的管道有并发数量限制,默认貌似是2个,也就是说,大量的超时,并不是对方接口问题,而很可能是我们都没有将那些http请求丢出去。
那怎么办呢,老D继续查阅资料和实验,发现ServicePointManager.DefaultConnectionLimit,这玩意可以设置默认http链接的限制,设置值越大,出现超时的情况就越少,只需要在程序初始化的时候设置一下,整个应用都将受益。
这时候,老A过来了。
老A:那是不是越大越好呢?
老D:你想想哦,这管道就相当于水管,这值越大,就等于水管直径越大,那出水量就越多。
老A:那不是很好吗,我们千万级并发,都可以做到瞬秒。
老D:你再想想哦,这出水量越大,说明冲击力就越大,那么水管就得更结实,甚至拿水管的人,都得更加有muscle,否则根本吃不消。
老A:哦哦哦,有道理。
老D:所以这个值并不能设置得太大,越大,就越吃资源,对我们的CPU、内存、磁盘、带宽等,都是一种考验。
老A:那应该设置多少比较合理呢?
老D:这问题问得好,我也不知道。
老A:那咋整?
老D:这好办,我们一点一点来试一下,设置不同的值,来分析对比下结果,看看哪个比较划算。
老A:好嘞。
老D:那我们就按照2的n次幂来试吧。
2...
4...
8...
16...
32...

浙公网安备 33010602011771号