SpringBoot内置Tomcat,在默认设置中,Tomcat的最大线程数是200,最大连接数是10000。支持的并发量是指连接数,也就是说 支持最大并发量是一万(默认)
Tomcat有两种处理连接的模式,
1,是BIO,一个线程只处理一个Socket连接,
2,是NIO,一个线程处理多个Socket连接。
由于HTTP请求不会太耗时,而且多个连接一般不会同时来消息,所以一个线程处理多个连接没有太大问题。一个线程处理多个连接数会很慢 有可能会超时
默认内嵌Tomcat配置:
server.tomcat.accept-count:等待队列长度,当可分配的线程数全部用完之后,后续的请求将进入等待队列等待,等待队列满后则拒绝处理,默认100。 server.tomcat.max-connections:最大可被连接数,默认10000 server.tomcat.max-threads:最大工作线程数,默认200, server.tomcat.min-spare-threads:最小工作线程数,初始化分配线程数,默认10
默认配置下,连接超过10000后会出现拒绝连接情况
默认配置下,触发的请求超过200+100后拒绝处理(最大工作线程数+等待队列长度)
如果默认配置无法满足当前需求 可以自己调优 可以手动修改配置来进行处理并发
修改pro文件
server.port=7001 server.tomcat.accept-count=1000 server.tomcat.max-connections=10000 server.tomcat.max-threads=500 server.tomcat.min-spare-threads=100
然后 打包重启项目
kill -9 9545 //杀死进程 ps -ef | grep java //查看项目启动的端口 pstree -p 7968 | wc -l //查看进程数
我们也可以使用配置文件, 可以新增WebServerConfiguration.java文件
import org.apache.catalina.connector.Connector; import org.apache.coyote.http11.Http11NioProtocol; import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.stereotype.Component; //当Spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时,会吧此bean加载进spring容器中 @Component public class WebServerConfiguration implements WebServerFactoryCustomizer{ @Override public void customize(ConfigurableWebServerFactory configurableWebServerFactory) { //使用对应工厂类提供给我们的接口定制化我们的tomcat connector ((TomcatServletWebServerFactory)configurableWebServerFactory).addConnectorCustomizers(new TomcatConnectorCustomizer() { @Override public void customize(Connector connector) { Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); //定制化keepalivetimeout,设置30秒内没有请求则服务端自动断开keepalive链接 protocol.setKeepAliveTimeout(30000); //当客户端发送超过10000个请求则自动断开keepalive链接 protocol.setMaxKeepAliveRequests(10000); } }); } }
备注:
MySQL 数据库 QPS 容量问题:
主键查询: 千万级别数据 == 1-10 ms
唯一索引查询: 千万级别数据 == 10-100 ms
非唯一索引查询: 千万级别数据 == 100-1000ms
无索引数据: 百万级别数据 == 1000ms+
MySQL 数据库 TPS 容量问题:
非插入的更新删除 *** 作: 同查询
插入 *** 作: 1w~10w tps(依赖配置优化)
原文链接:https://blog.csdn.net/yin__ren/article/details/93331528
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)