网站制作过程合理的步骤,石家庄市建设局网站首页,网站平台,在本地安装wordpress目录
一、前言
二、相关配置
1、配置信息
2、配置说明
3、案例说明
三、代码验证
1、测试代码 2、测试步骤
四、总结 一、前言
首先#xff0c;在Spring Boot应用中#xff0c;我们可以使用 Tomcat、Jetty、Undertow 等嵌入式 Web 服务器作为应用程序的运行容器。这…目录
一、前言
二、相关配置
1、配置信息
2、配置说明
3、案例说明
三、代码验证
1、测试代码 2、测试步骤
四、总结 一、前言
首先在Spring Boot应用中我们可以使用 Tomcat、Jetty、Undertow 等嵌入式 Web 服务器作为应用程序的运行容器。这些服务器都支持并发请求处理的能力。另外Spring Boot 还提供了一些配置参数可以对 Web 服务器进行调优以提高其并发处理能力。而我们大家都知道Spring Boot应用默认使用的Web服务器内嵌容器为Tomcat了解了以上内容我们就知道这个问题的本质就是一个Spring Boot应用内嵌的Tomcat能够处理多少请求。
二、相关配置
1、配置信息
关于Tomcat的默认配置都在spring-configuration-metadata.json文件中对应的配置类则是org.springframework.boot.autoconfigure.web.ServerProperties。 2、配置说明
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。
3、案例说明
如果把Tomcat比作一家饭店的话那么一个请求其实就相当于一位客人。min-spare就是厨师(长期工)max是厨师总数(长期工临时工)max-connections就是饭店里的座位数量accept-count是门口小板凳的数量。来的客人优先坐到饭店里面然后厨师开始忙活如果长期工可以干得完就让长期工干如果长期工干不完就再让临时工干。
图中画的厨师一共15人饭店里有30个座位也就是说如果现在来了20个客人那么就会有5个人先在饭店里等着。如果现在来了35个人饭店里坐不下就会让5个人先到门口坐一下。如果来了50个人那么饭店座位门口小板凳一共40个所以就会有10人离开。
也就是说SpringBoot能同时处理的最大请求数量是max-connections accept-count超过该数量的请求直接就会被丢掉。 三、代码验证
1、测试代码
首先创建一个SpringBoot的项目然后在application.yml里配置一下对应参数默认最大连接数为8192这里我们为了方便你测试将最大连接数调整为40。
配置内容
server:tomcat:threads:# 最少线程数min-spare: 10# 最多线程数max: 15# 最大连接数max-connections: 30# 最大等待数accept-count: 10
接口内容
首先通过日志输出线程名称然后休眠0.5秒这样就会使得应用在处理请求时无法一次性处理所有请求从而让部分请求进入到等待队列。
GetMapping(/test)
public Response test1(HttpServletRequest request) throws Exception {log.info(ip:{},线程:{}, request.getRemoteAddr(), Thread.currentThread().getName());Thread.sleep(500);return Response.buildSuccess();
} 2、测试步骤
使用Apifox创建一个测试用例来模拟100个请求如果你不习惯使用这个工具的话也可以使用jmeter来达到同样的测试效果。 从结果中可以看出由于设置的max-connections accept-count的和是40所以有60个请求会被丢弃这和我们的预期是相符的。由于最大线程是15也就是有25个请求会先等待等前15个处理完了再处理15个最后在处理10个也就是将40个请求分成了15,15,10这样三批进行处理。 再结合控制台打印的日志不难看出线程的最大编号是15这也印证了前面的想法。 四、总结
SpringBoot能同时处理的最大请求数量是max-connections accept-count。如果并发请求数量低于server.tomcat.threads.max则会被立即处理超过的部分会先进行等待。如果数量超过max-connections与accept-count之和则多余的部分则会被直接丢弃。SpringBoot在处理请求时会根据请求的数量分批次进行处理。