Springboot内置Tomcat线程数测试

2023-11-13

SpringBoot 2.7.3

本文主要介绍SpringBoot内置Tomcat的主要参数,解析最大线程数和最大连接数的作用方式。SpringBoot各版本的参数配置可能不完全一样,本文以2.7.3版本为例进行试验。

一、默认配置

SpringBoot内置Tomcat的配置存放在 spring-configuration-metadata.json 文件中,配置以 server.tomcat 开头
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RtFt2Av-1661699673372)(Springboot内置Tomcat线程数测试.assets/image-20220828210829288.png)]
最小线程数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4cVZXid1-1661699673376)(Springboot内置Tomcat线程数测试.assets/image-20220828211009723.png)]

# 最小工作空闲线程数,默认10
server.tomcat.threads.min-spare=10

最大线程数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LzRaehtK-1661699673377)(Springboot内置Tomcat线程数测试.assets/image-20220828211200274.png)]

# 最大工作线程数,默认200
server.tomcat.threads.max=200

最大连接数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BFeS1bvy-1661699673378)(Springboot内置Tomcat线程数测试.assets/image-20220828211746328.png)]

# 最大连接数默认是8192
server.tomcat.max-connections=8192

队列长度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ItAr312N-1661699673379)(Springboot内置Tomcat线程数测试.assets/image-20220828211712179.png)]

# 等待队列长度,默认100
server.tomcat.accept-count=100

二、测试各参数的作用

1、准备测试接口
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Tomcat测试类
 *
 * @author Administrator
 * @date 2022/8/28
 */
@RestController
@RequestMapping("/tomcat")
public class TomcatController {

    /**
     * localhost:8080/tomcat/getString
     *
     * @return
     */
    @RequestMapping("/getString")
    public String getString() {
        try {
            // 将线程挂起3秒,方便观察结果
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "success";
    }

}
2、Tomcat配置,这里设置小一点方便测试
# 最小工作空闲线程数
server.tomcat.threads.min-spare=10
# 最大工作线程数
server.tomcat.threads.max=20
# 最大连接数
server.tomcat.max-connections=30
# 等待队列长度
server.tomcat.accept-count=5
3、通过设置 Jmeter 线程的线程数据测试各参数的影响效果

1)并发请求数 <= Tomcat最大线程数20

Jmeter设置:线程数20
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3jrJGF8-1661699673380)(Springboot内置Tomcat线程数测试.assets/image-20220828214607910.png)]
执行结果:平均响应时间为3s,20个请求都能正常处理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nIyFyict-1661699673381)(Springboot内置Tomcat线程数测试.assets/image-20220828214639916.png)]
2)并发请求数 >Tomcat最大线程数20

Jmeter设置:线程数21
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yNivgcav-1661699673382)(Springboot内置Tomcat线程数测试.assets/image-20220828214416771.png)]
执行结果:20个响应时间为3s,正常处理;1个请求响应时间为6s,说明Tomcat线程数不够,等待前面20个请求处理完,第21个请求才开始处理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TgLLi3Z8-1661699673382)(Springboot内置Tomcat线程数测试.assets/image-20220828214444246.png)]
3)请求数超过最大连接数30

Jmeter设置:线程数31
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ruu7DNWC-1661699673383)(Springboot内置Tomcat线程数测试.assets/image-20220828220549385.png)]
执行结果:31个请求全部执行成功,因为请求数31大于最大连接数30,所以第31个请求放入等待队列
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZmRvEyj9-1661699673383)(Springboot内置Tomcat线程数测试.assets/image-20220828220533735.png)]
Jmeter设置:线程数36
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0n0NIGC-1661699673384)(Springboot内置Tomcat线程数测试.assets/image-20220828220828979.png)]
执行结果:35个请求执行成功;一个执行失败,因为请求数大于了35(最大连接数30 + 等待队列5),请求被丢弃

三、总结

最大连接数:每个Http请求占用一个连接

等待队列长度:Http请求数超过最大连接数时,多出的请求会放入等待队列,如果队列也满了请求会被丢弃。所以Tomcat能接收的请求数为最大连接数+等待队列长度

最大线程数:Tomcat最多能同时处理的请求数,比如有30个请求,但是最大线程数为20,那么同时有20个请求可以被处理

四、参考文档

Jmeter教程(一) - 入门

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot内置Tomcat线程数测试 的相关文章

随机推荐

  • SQLSERVER-CASE关键词的用法 .

    在Oralce中有个函数为Decode 感觉非常好用 但是此函数为Oracle所独有 在SQLSERVER和MYSQL中实现与之相类似的功能还无相关函数 但通过CASE关键词可实现类似功能 1 首先让我们看一下 CASE 的语法 在一般的
  • 僵尸进程及其处理

    进程 一个可并发执行的程序在一个数据集上的一次运行 即程序的一次运行过程 进程与程序的关系 程序是进程的一个组成部分 是进程的执行文本 进程是程序的执行过程 僵尸进程 进程主体结束 但是进程的PCB依旧存在 在多进程编程中 父进程未结束 但
  • 用U盘安卓esxi虚拟机出现 error loading /s.v00 错误解决办法

    前段时间用 一个 白色的 东芝U盘 给戴尔 R720服务器安装 esxi 6 0时 在加载到 s v00 找个文件时出现错误 大致为 error loading s v00 compressed MD5 xxxxxxx decompress
  • vue3快速入门-Teleport传送(瞬移组件)

    Vue 的组件架构使我们能够将用户界面构建为能够精美地组织业务逻辑和表示层的组件 Teleporting是Vue 3发布带来的一项新功能 它的灵感来自React Portals 相同的门户是 React 中的一个常见功能 在 Vue2 的
  • 2023最新100道渗透测试面试题(附答案)

    眨眼间2023年快过去一半了 不知道大家有没有找到心仪的工作呀 今天我给大家整理了100道渗透测试面试题给大家 需要答案的话可以在评论区给我留言哦 第一套渗透面试题 什么是渗透测试 它的目的是什么 渗透测试的五个阶段是什么 您如何选择正确的
  • SimPy

    目录 简介 安装命令 Environment Events Sleep until woken up Waiting for another process to terminate Interrupting another process
  • 【“码”力全开,“章”显实力】2022年第1季Task挑战赛贡献者榜单

    通过区块链技术及智能合约实现石头剪刀布的游戏玩法 解决双方遇到分歧的场景 让一方说服另一方 从0开始构建WeCross Go SDK 以方便社区开发者通过Go SDK实现UBI接口的快速调用 一系列FISCO BCOS WeBASE的实操教
  • H5之webcoekt播放JPEG图片流

    一 简介 既然webcoekt是基于tcp连接的 理论上讲所有的浏览器是可以私有协议处理二进制的 如果我们需要播放视频 我们可以将视频数据在后端解码后直接将图片推送到webcoekt前端 然后前端通过websocket接收图片然后将图片显示
  • 如何修改jar文件的内容

    在做 或修改别人的 项目的时候 可能遇到要修改调用的的jar包内的类属性或方法的问题 在eclipse或是其他的IDE中是无法直接修改的 所以需要一个解压jar gt 修改文件 gt 编译 gt 打包成jar文件的过程 下面简要的记录下我是
  • KL散度

    KL散度 Kullback Leibler divergence 也称为相对熵 relative entropy 是用来衡量两个概率分布之间差异的一种指标 在机器学习中 KL散度常常用于度量两个概率分布之间的相似度或差异性 具体来说 假设我
  • Volatile关键字

    目录 1 volatile是什么 2 volatile具有什么样的特性呢 3 volatile的内存语义 JMM 在java中如何保证可见性呢 总线嗅探机制 如何保证原子性 volatile关键字可以保证指令重排序 JMM 就将内存屏障插
  • cocos2d-x位图字体生成工具Bitmap Font Generator的使用(内含命令行)

    欢迎转载 本帖地址 http blog csdn net jinjian2009 article details 9371691 刚才发完贴发现 图全没了 原来自己直接贴的 没有上传 现在补全了 说下本文 重点就是命令行 如果用过这个工具的
  • adb server version (31) doesn't match this client

    报错信息如下 C Users linux gt adb shell adb server version 31 doesn t match this client 36 killing daemon started successfully
  • 超详细的Elasticsearch教程

    一 Elasticsearch介绍和安装 用户访问我们的首页 一般都会直接搜索来寻找自己想要购买的商品 而商品的数量非常多 而且分类繁杂 如何能正确的显示出用户想要的商品 并进行合理的过滤 尽快促成交易 是搜索系统要研究的核心 面对这样复杂
  • Expected object of backend CPU but got backend CUDA for argument #2 'weight' 报错的问题和解决办法

    很实用的工具 https blog csdn net zz2230633069 article details 93266950
  • GIT的使用

    GIT 的常规操作 常规操作也是我自己平时常用的几个命令 学自于 pro git 这本书中 git 配置文件 git的配置文件位置 针对所有用户 etc gitconfig 针对当前用户 gitconfig 查看配置的方法 git conf
  • 图像匹配算法

    图像匹配算法分为3类 基于灰度的匹配算法 基于特征的匹配算法 基于关系的匹配算法 1 基于灰度的模板匹配算法 模板匹配 Blocking Matching 是根据已知模板图像到另一幅图像中寻找与模板图像相似的子图像 基于灰度的匹配算法也称作
  • PowerShell 语法

    PowerShell是微软公司开发的一种任务自动化和配置管理框架 基于 NET框架 以下是PowerShell的一些常用语法 命令语法 标准命令语法 如 Get ChildItem 活动目录命令语法 如 Get ADUser 参数 格式为
  • 人生苦短,我用python

    如果你看到一个人穿着一个短袖 短袖上面印着 人生苦短 我用python 不用怀疑 他一定是一个python程序员 作为编程热门语言排行榜首的python 有着强大的粉丝社区 因为它的简洁 越来越多的人喜欢上了它 而这个语言 就是由吉多 范罗
  • Springboot内置Tomcat线程数测试

    SpringBoot 2 7 3 本文主要介绍SpringBoot内置Tomcat的主要参数 解析最大线程数和最大连接数的作用方式 SpringBoot各版本的参数配置可能不完全一样 本文以2 7 3版本为例进行试验 一 默认配置 Spri