0

0

springboot内置tomcat支持最大的并发量问题怎么解决

WBOY

WBOY

发布时间:2023-05-22 20:21:50

|

5898人浏览过

|

来源于亿速云

转载

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

    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

      Quicktools Background Remover
      Quicktools Background Remover

      Picsart推出的图片背景移除工具

      下载
    • 无索引数据: 百万级别数据 == 1000ms+

    MySQL 数据库 TPS 容量问题:

    • 非插入的更新删除操作: 同查询

    • 插入操作: 1w~10w tps(依赖配置优化)

    提高tomcat并发量的几种方法

    1、Apache + Tomcat 结合起来用Apache负责静态页面,Tomcat负责动态页面,同时减少connectionTimeout的时间,以应对并发量大线程回收来不及的情况。

    2、压力过大的问题,可以做负载均衡,一个TOMCAT无论如何也不可能担当如此多的线程负载,而且JVM过大,其内存管理成本将显著加大。更加合理和科学的做法是使用2GB的内存,配置3到4个TOMCAT实例,每个实例的内存为512MB。

    3、数据库连接池,不少人,都推荐使用C3P0,能提高访问数据库的并发性能好几倍。

    4、采用Tomcat集群可以最大程度的发挥服务器的性能,可以在配置较高的服务器上部署多个Tomcat,也可以在多台服务器上分别部署Tomcat,Apache和Tomcat整合的方式还是JK方式。经过验证,系统对大用户量使用的响应方面,Apache+3Tomccat集群> Apache+2Tomcat集群 > Apache集成Tomcat > 单个Tomcat。并且采用Apache+多Tomcat集群的部署方式时,如果一个Tomcat出现宕机,系统可以继续使用,所以在硬件系统性能足够优越的情况下,需要尽量发挥软件的性能,可以采用增加Tomcat集群的方式。

    1. 配置MPM(Multi Processing Modules多进程模块)。ThreadPerChild,这个参数用于设置每个进程的线程数,在Windows环境下默认值是64,最大值是1920,建议设置为100-500之间,服务器性能高的话值大一些,反之小一些。最大请求次数每个子进程能够处理是由MaxRequestPerChild参数确定的。这个参数的值更大程度上取决于服务器的内存,如果内存比较大的话可以设置为很大的参数,否则设置一个较小的值,建议值是3000.

    2. 关闭DNS和名字解析 HostnameLookups off

    3. 打开UseCanonicalName模块 UseCanonicalName on

    4. 关闭多余模块 一般来说,不需要加载的模块有,mod_include.so、mod_autoindex.so、mod_access.so、mod_auth.so.

    5. 打开KeepAlive支持

    KeepAlive on, KeepAliveTimeout 15 MaxKeepAliveRequests 1000

    根据实际经验,通过Apache和Tomcat集群的方式提高系统性能的效果十分明显,这种方式可以最大化的利用硬件资源,通过多个Tomcat的处理来分担单Tomcat时的压力。

    web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。

    相关专题

    更多
    Java JVM 原理与性能调优实战
    Java JVM 原理与性能调优实战

    本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

    17

    2026.01.20

    PS使用蒙版相关教程
    PS使用蒙版相关教程

    本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

    61

    2026.01.19

    java用途介绍
    java用途介绍

    本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

    87

    2026.01.19

    java输出数组相关教程
    java输出数组相关教程

    本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

    39

    2026.01.19

    java接口相关教程
    java接口相关教程

    本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

    10

    2026.01.19

    xml格式相关教程
    xml格式相关教程

    本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

    13

    2026.01.19

    PHP WebSocket 实时通信开发
    PHP WebSocket 实时通信开发

    本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

    19

    2026.01.19

    微信聊天记录删除恢复导出教程汇总
    微信聊天记录删除恢复导出教程汇总

    本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

    157

    2026.01.18

    高德地图升级方法汇总
    高德地图升级方法汇总

    本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

    164

    2026.01.16

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Redis6入门到精通超详细教程
    Redis6入门到精通超详细教程

    共47课时 | 5.3万人学习

    Tomcat核心原理解析
    Tomcat核心原理解析

    共57课时 | 6.9万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号