微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

springboot内置的tomcat 支持最大的并发量

架构 aide_941 3℃ 0评论

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 支持最大的并发量

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!