当前位置:

首页 > 编程开发 > 如何在SpringBoot中内嵌Tomcat并发容量

如何在SpringBoot中内嵌Tomcat并发容量

发现并发容器问题对单接口进行6000线程压测,每个线程请求5次,线程在5秒内创建完毕,当进行一半的时候,已经出现了请求响应时间过大及其错误率达到了43%。这个并发容量对于配置比较好点的服务器相对来说有点弱。深入SpringBoot底层了解原因在SpringBoot官方文档中提到了关于元数据的配置可以看到,关于我们最常用的设置项目的端口的默认配置就在其中。默认内嵌Tomcat配置1、server.tomcat.accept-count:等待队列长度,当可分配的线程数全部用完之后,后续的请求将进入等待队列等待

本文目录

    发现并发容器问题

    如何在SpringBoot中内嵌Tomcat并发容量

    如何在SpringBoot中内嵌Tomcat并发容量

    对单接口进行6000线程压测,每个线程请求5次,线程在5秒内创建完毕,当进行一半的时候,已经出现了请求响应时间过大及其错误率达到了43%。这个并发容量对于配置比较好点的服务器相对来说有点弱。

    深入SpringBoot底层了解原因

    在SpringBoot官方文档中提到了关于元数据的配置

    如何在SpringBoot中内嵌Tomcat并发容量

    可以看到,关于我们最常用的设置项目的端口的默认配置就在其中。

    默认内嵌Tomcat配置

    1、server.tomcat.accept-count:等待队列长度,当可分配的线程数全部用完之后,后续的请求将进入等待队列等待,等待队列满后则拒绝处理,默认100。

    2、server.tomcat.max-connections:最大可被连接数,默认10000

    3、server.tomcat.max-threads:最大工作线程数,默认200,

    4、server.tomcat.min-spare-threads:最小工作线程数,初始化分配线程数,默认10

    默认配置下,连接超过10000后会出现拒绝连接情况

    默认配置下,触发的请求超过200+100后拒绝处理(最大工作线程数+等待队列长度)

    这些元数据Spring当然提供了外部配置功能

    #更改内嵌tomcat参数
    server.port=8080
    ## 等待队列长度,默认100。
    server.tomcat.accept-count=1000
    ## 最大工作线程数,默认200。(4核8g内存,线程数经验值800,操作系统做线程之间的切换调度是有系统开销的,所以不是越多越好。)
    server.tomcat.max-threads=800
    ## 最小工作空闲线程数,默认10。(适当增大一些,以便应对突然增长的访问量)
    server.tomcat.min-spare-threads=100

    SpringBoot内置Tomcat,在默认设置中,Tomcat的最大线程数是200,最大连接数是10000。支持的并发量是指连接数,200个线程如何处理10000条连接的?

    目前Tomcat有三种处理连接的模式,一种是BIO,一个线程只处理一个连接,另一种就是NIO,一个线程处理多个连接。由于HTTP请求不会太耗时,而且多个连接一般不会同时来消息,所以一个线程处理多个连接没有太大问题。

    还有一种是apr模式,后续会详细介绍一下tomcat的这三种模式,这里不做深入讨论。

    Tomcat启动的时候,可以通过log看到Connector使用的是哪一种运行模式:

    Starting ProtocolHandler ["http-bio-8080"]
    Starting ProtocolHandler ["http-nio-8080"]
    Starting ProtocolHandler ["http-apr-8080"]

    默认值可以在spring-boot-autoconfigure-版本号.jar(比如:spring-boot-autoconfigure-2.1.0.RELEASE) 包中看到,解压反编译/web/ServerProperties.class文件就可以看到默认配置。

    如何在SpringBoot中内嵌Tomcat并发容量

    定制化内嵌Tomcat开发

    如何在SpringBoot中内嵌Tomcat并发容量

    关于KeepAlive

    在使用Jmeter的Http请求中默认是开启KeepAlive的

    Http的KeepAlive请求为当我们的客户端向我们的服务器发送Http请求的时候,若带上了KeepAlive的请求头,则表明我们的Http客户端希望跟服务端之间建立一个KeepAlive的连接,这个连接对应的用处就是说,向我们的服务端发送完对应的响应之后,我们的服务端不要立马断开连接,而是等待尝试复用连接。

    此解决方案是用来解决Http的一个响应,无状态,每次都要断开连接,新建连接所带来的一个耗时问题。

    但如果说我们每个网页请求打开之后都跟服务端保持一个长连接,那我们服务端的连接数很快就会被用完了,因此再最早的Http1.0的时候是没有设计KeepAlive的请求的,但是现在的Http1.1加上KeepAlive请求,目的就是越来越多的移动端的设备,甚至于一些很复杂的网页交互,需要在用户浏览的过程当中,频繁的向服务端发送请求,因此,建立一个KeepAlive连接,并非为了压测的目的,而是真正的在应用场景上是有一些性能的好处的,无论是客户端还是服务端,在做一些网络通信的交互上面,无需每次都新建连接,断开连接,耗费Tcp/Ip建连的时间,而仅仅只需要发送数据即可。

    但是这样的设计也会带来一些问题,如果说我们的服务端对KeepAlive的操作没有做任何限制 1.连接不做任何操作,不做任何响应,那这条连接对服务端来说就是一条费连接 2.有一些攻击者恶意利用KeepAlive连接向我们的服务端发送DDOS的攻击,那服务端对应的连接只会成为攻击者攻击的后门,因此,为了安全,我们需要定制化Tomcat开发

    配置

    1、KeepAliveTimeOut:多少毫秒后客户端不响应则断开KeepAlive

    2、maxKeepAliveRequests:多少次请求后KeepAlive断开失效

    在SpringBoot官方文档中提到了对内嵌容器的配置

    如何在SpringBoot中内嵌Tomcat并发容量

    //当spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时,会把bean加载进spring容器
    @Configuration
    public class WebServerConfiguration implements WebServerFactoryCustomizer {
    @Override
    public void customize(ConfigurableWebServerFactory factory) {
      //使用对应工厂类提供给我们的接口定制化我们的tomcat connector
      ((TomcatServletWebServerFactory)factory).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);
        }
      });
    }
    }
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 tomcat
    相关文章 更多
    tomcat启动失败的原因和解决办法详解
    tomcat启动失败的原因和解决办法详解

    详细分析 Tomcat 启动失败的常见原因,并提供可操作的排查和解决方案。

    修改tomcat的默认端口号配置文件及操作步骤
    修改tomcat的默认端口号配置文件及操作步骤

    详细讲解如何在Tomcat中通过编辑conf/server.xml文件来修改默认的HTTP连接器端口,包含文件路径查找、关键标签定位及重启服务的完整步骤。

    tomcat部署项目流程详细步骤与配置教程
    tomcat部署项目流程详细步骤与配置教程

    手把手教你如何在Tomcat中部署Web项目,包括自动部署与手动配置server.xml的方法,解决端口冲突和路径访问问题,适合Java初学者和运维人员参考。

    tomcat安装与环境变量配置教程及完整操作步骤
    tomcat安装与环境变量配置教程及完整操作步骤

    手把手教你在Windows系统中安装Apache Tomcat并配置关键环境变量。涵盖JDK验证、CATALINA_HOME设置及启动测试,确保Web服务器正常运行,适合Java初学者参考。

    flex tomcat端口被占用的问题分析及解决方法
    flex tomcat端口被占用的问题分析及解决方法

    启动Tomcat时若8080端口被占用,可在命令行输入`netstat-ano`查找PID,再于任务管理器结束该进程,最后重新启动Tomcat即可释放端口并正常运行。

    solaris 10下安装java+tomcat
    solaris 10下安装java+tomcat

    在Solaris系统上配置Ja va和Tomcat环境,说起来不算复杂,但一些细节如果不注意,很容易卡壳。下面以Solaris10为例,把整个流程拆开讲清楚,跟着步骤走就能搞定。 1. Ja va安装 先把安装文件 j2re-1_4_2_05-solaris-i586.sh 上传到 /export/

    Windows下Tomcat8注册为服务及开机自启设置
    Windows下Tomcat8注册为服务及开机自启设置

    在Windows10专业版1909上安装并配置Tomcat8.5.34以注册为服务并设置开机自启的实践笔记。以下是我对Tomcat进行的调整:0.1.注册为Windows服务0.2.更改开机启动方式0.3.POST提交长度修改0.4.改访问端口0.5.增加静态资源的缓存0.6.改内存0.7.加编码UTF-8默认设置:默认服务名:Tomcat8默认服务显示名称:ApacheTomcat8.5Tomcat8默认启动方式:手动启动默认内存:128m至256m下载官

    Web后端开发入门指南(2)
    Web后端开发入门指南(2)

    大家好,很高兴再次与你们见面,我是你们的朋友全栈君。设置JavaWeb应用开发环境——Tomcat服务器的下载与安装首先,搜索Tomcat,找到如下网址:点击链接,进入Tomcat官方网站。在左侧栏找到“Download”选项,选择最新版的Tomcat9,点击进入。向下滚动,找到如图所示的位置,Core核心部分提供zip版、tar.gz版(适用于Linux系统)、32位版、64位版以及安装版。如果不需要安装程序,请选择前几个版本;如果需要安装程序,则下载最后一个版本。选择适合自己的版本进行下载。安

    详细指引:Tomcat的部署和性能优化
    详细指引:Tomcat的部署和性能优化

    Tomcat是一个常用的JavaWeb应用服务器,用于部署和运行JavaWeb应用程序。下面是Tomcat部署和优化的详细教程:部署Tomcat:下载Tomcat:访问ApacheTomcat官方网站()下载适合你的操作系统的Tomcat版本。解压Tomcat:将下载的Tomcat压缩包解压到目标目录,例如/opt/tomcat。配置环境变量:将Tomcat的bin目录路径添加到系统的PATH环境变量中,以便在任何位置都可以使用Tomcat命令。启动Tomcat:打开终端,进入Tomcat的bin目录,执

    springBoot项目常用目录有哪些
    springBoot项目常用目录有哪些

    springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。