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<ConfigurableWebServerFactory> {
@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
————————————————
版权声明:本文为CSDN博主「Joe world」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45959518/article/details/121559046
转载请注明:SuperIT » springboot内置的tomcat 支持最大的并发量