springboot应用程序并发请求达到多少会被拒绝 |
您所在的位置:网站首页 › 测速达到多少是达标 › springboot应用程序并发请求达到多少会被拒绝 |
文章目录
前言内嵌服务器tomcat测试
undertow
前言
前几天刷B站看到了一个问题,感觉挺有意思的,“忽略接口本身性能,springboot应用程序能处理多少请求不被拒绝?”,今天便来探一探这个问题 本文主要重点是侧重于springboot应用程序内嵌服务器的并发请求处理能力以及参数,而非接口的QPS 本文测试使用的springboot版本为 2.3.12.RELEASE ![]() 众所周知,springboot应用程序默认的内嵌服务是tomcat 从pom.xml依赖跟踪后发现, springboot 2.3.12.RELEASE 默认使用内嵌服务器为tomcat 9.0.46 那么,默认情况下我们springboot应用程序能处理多少请求,取决于我们内嵌tomcat服务器配置 tomcat从springboot官网翻阅,我们程序可配置的tomcat参数有很多,但结合配置的作用说明,我们整理发现如下几个参数与并发请求处理有关 点击查看官网配置 与并发请求处理相关配置 配置属性作用默认值server.tomcat.accept-count当所有可能的请求处理线程都在使用中时,传入连接请求的最大队列长度。(等待队列长度)100server.tomcat.threads.max工作线程的最大数量。200server.tomcat.threads.min-spare工作线程的最小数量。10server.tomcat.max-connections服务器在任何给定时间接受和处理的最大连接数。一旦达到限制,操作系统仍然可以接受基于“acceptCount”属性的连接。8192当然我们也可以通过yml文件点过去进行查看其属性以及默认值 那么,这四者的关系是什么呢? 并发处理性能: server.tomcat.threads.max、server.tomcat.threads.min-spare 这两个是关于工作线程数的配置,即我们服务器至多可启用多少个线程处理我们的请求,此配置为服务器并发处理能力强弱 可以看到,我在页面请求了23次,都被tomcat服务最小工作线程(10)个处理了,为什么线程没有突破10的界限?因为我的逻辑很简单,线程数能够应对我们请求的频次,只有无法应对请求频次时,服务器的线程数会突破最小线程数设置,不断扩容直至向最大线程数 并发处理接受能力: 可以看作为承纳并发能力的容器能装多少东西 server.tomcat.max-connections 代表着tomcat服务器一定时间内可处理的最大连接数,server.tomcat.accept-count 代表着tomcat 等待队列;这两个配置便是我们今天要探究的程序请求并发接受能力 测试 @RequestMapping("hello") @RestController @Log4j2 public class HelloController { @GetMapping public String helloWorld() throws InterruptedException { log.info("当前处理线程:{}", Thread.currentThread().getName()); TimeUnit.SECONDS.sleep(1); return "helloWorld"; } }对应配置属性改为较小的值方便观察测试 server: port: 8080 tomcat: threads: # 最小工作线程 (默认值为10) min-spare: 5 # 最大工作线程(默认值200) max: 10 # 最大请求连接数为(默认值8192) max-connections: 30 # 等待队列长度为(可等待10个请求)(默认值100) accept-count: 5经过测试,并发请求数大于 max-connections+ accept-count -1 时,我们的请求会被丢弃,抛出连接异常信息 结论: 如果springboot应用程序使用了tomcat程序,那么其能够支持的请求数为 max-connections+ accept-count -1,如果不改配置的话则是(8192+100-1),即可以接收8291的数据慢慢处理,并发超过该数则会被拒接,请求也不会被处理了 undertowtodo |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |