SpringBoot可以同时处理多少请求?
正文
我们都知道,SpringBoot默认的内嵌容器是Tomcat,也就是我们的程序实际上是运行在Tomcat里的。所以与其说SpringBoot可以处理多少请求,到不如说Tomcat可以处理多少请求。
关于Tomcat的默认配置,都在spring-configuration-metadata.json文件中,对应的配置类则是org.springframework.boot.autoconfigure.web.ServerProperties。

和处理请求数量相关的参数有四个(大家可以在json文件里面找一下):

server.tomcat.threads.min-spare:最少的工作线程数,默认是10。该参数相当于长期工,如果并发请求的数量达不到10,就会依次使用这几个线程去处理请求。server.tomcat.threads.max:最多的工作线程数,默认是200。该参数相当于临时工,如果并发请求的数量在10到200之间,就会使用这些临时工线程进行处理。server.tomcat.max-connections:最大连接数,默认是8192。表示Tomcat可以处理的最大请求数量,超过8192的请求就会被放入到等待队列。server.tomcat.accept-count:等待队列的长度,默认是100。
举个例子说明一下这几个参数之间的关系:

如果把Tomcat好比作一家餐厅的话,那么一个请求其实就相当于一位顾客。参数如上图的表示。来的顾客优先坐到饭店里面,然后厨师开始忙活,如果长期工可以干的完,就让长期工干,如果长期工干不完,就再让临时工干。图中画的厨师一共15人,餐厅里有50个座位,也就是说,如果现在来了20个客人,那么就会有5个人先在饭店里等着。如果现在来了55个人,饭店里坐不下,就会让5个人先到门口坐一下。如果来了70个人,那么饭店座位+门口小板凳一共60个,所以就会有10人离开。
也就是说,SpringBoot同时所能处理的最大请求数量是max-connections+accept-count,超过该数量的请求直接就会被丢掉。
总结:如果并发请求数量低于server.tomcat.threads.max,则会被立即处理,超过的部分会先进行等待,如果数量超过max-connections与accept-count之和,则多余的部分则会被直接丢弃。
本文来自博客园,作者:uuuu-zhang,转载请注明原文链接:https://www.cnblogs.com/uuuuZhang/p/18008316

浙公网安备 33010602011771号