Tomcat 的maxConnections、maxThreads、acceptCount 之间的关系

news2024/11/17 16:40:24

1. 在springboot 项目配置方式

server:
  port: 8081
  servlet:
    context-path: "/account"
  tomcat:
    threads:
      max: 200
      min-spare: 10
    max-connections: 8192
    accept-count: 100
    connection-timeout: 10000
  • min-spare :最小线程数
    最小工作空闲线程数,默认10,适当增大一些,以便对应突然增长的访问量

  • max-threads : 最大线程数
    每一次Http请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了web服务容器可以同时处理多少个请求。 maxThreads默认值200, 肯定建议增加,但是增加线程是有成本的,更多的线程不仅仅会带来更多的线程上下文切换成本,而且意味着带来更多的内存消耗。JVM默认的情况下在创建新线程时会分配大小为1M的线程栈,所以更多的线程意味着需要更多的内存,线程数的经验值为 1C2G内存为200,线程数经验值为200; 4C8G线程数经验值为800

  • maxConnections:最大连接数
    这个参数是指在同一时间,tomcat能够接受的最大连接数。对于Java的阻塞式BIO,默认值是maxthreads的值;如果在BIO模式使用定制的Executor执行器,默认值将是执行器中maxthreads的值。对于Java 新的NIO模式,maxConnections 默认值是10000。
    对于windows上APR/native IO模式,maxConnections默认值为8192,这是出于性能原因,如果配置的值不是1024的倍数,maxConnections 的实际值将减少到1024的最大倍数。
    如果设置为-1,则禁用maxconnections功能,表示不限制tomcat容器的连接数。
    maxConnections和accept-count的关系为:当连接数达到最大值maxConnections后,系统会继续接收连接,但不会超过acceptCount的值

  • accept-count : 最大等待数
    当所有的请求处理线程都在使用时,所能接收的连接请求的队列最大长度。当队列已满时,任何的连接请求都将被拒绝。 accept-count 默认值100 。详细来说,当调用http请求数达到tomcat的最大线程数时,还有新的http请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是能够接收的最大等待数,默认100。如果等待队列也被放满了,这个时候再来新的请求的请求就会被tomcat拒绝(connection refused)

2. maxConnections、maxThreads、acceptCount的关系

我们可以把tomact比做一个饭店,流程是取号、入座、叫服务员可以做三个形象的类比

线程关系
(1)thread.min-spare 最小线程数
可以类比为厨师的核心个数,同一个时刻只能给一张餐桌炒菜,就像极了JVM中的一条线程
(2) maxThreads 最大线程数
可以类比为厨师的最大个数
(3) maxConnections 最大连接数
可以类比为饭店的餐桌数量,如果所有的桌子都已坐满了,则表示餐厅已满,已经达到服务的数量上限,不能再有顾客进入餐厅了
(4) acceptCount 最大等待数
可以类比餐厅的排号处能够容纳排号的最大数量。排号的数量不是无限制的,餐厅的排号到了一个数量之后,服务往往会说:已经可以客满

整个流程大致如下:

  1. 取号: 如果maxConnentions连接数没有满,就不需要取号,因为还有空余的餐桌,直接被大堂服务员领上餐桌,点菜就餐就可。如果macConnections 连接数满了,但是取号人数没有达到acceptCount 则取号成功。如果取号人数达到acceptCount,则拿号失败,会得到tomcat的 connection refused connect 的回复信息
  2. 上桌:如果有餐桌空出来了,表示maxConnections连接数没有满,排除的人可以进入大堂就餐
  3. 就餐:就餐需要厨师炒菜。厨师的数量比顾客的数量肯定会少一些。一个厨师一个需要给多张餐桌炒菜,如果就餐的人越多,厨师也会忙不过来。这时候就可以增加厨师,一旦增加到maxThreads的值,如果还是不够,只能拖慢每一张餐桌的上菜速度,这种情况就是大家常见的 “上一道菜吃完了,下一道菜还有没上的” 的尴尬场景

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT 自定义提示词模板提升使用效率

相关文章推荐: 《提问的艺术:如何通过提示词让 ChatGPT 更准确地理解你的问题?》 《这些免费插件,让你的 ChatGPT 效率爆炸》 一、背景 现在 ChatGPT 异常火爆,很多人都在体验甚至购买 ChatGPT Plus。 现在使用 ChatG…

ProtoBuf之启航

"How do we do we do go refarming~" 如何理解序列化和反序列化? 序列化: 把 对象 转换为 字节序列 的过程 称为对象的序列化。 反序列化: 把 字节序列 恢复为 对象 的过程 称为对象的反序列化。 这两对反义词从概念上来说并不难理解,但是为什么有事没…

Xcode 14.3 和 iOS 16.4 为 SwiftUI 带来了哪些新的功能?

0. 概览 今年年初,Apple 推出了最新的 Xcode 14.3 以及对应的 iOS 16.4 。 与此同时,它们对目前最新的 SwiftUI 4.0 也添加了一些新功能: sheet 弹窗后部视图(Interact with a view Behind a sheet)可交互&#xff…

高级树结构

二叉排序树 左子树中所有结点的值,均小于其根结点的值。 右子树中所有结点的值,均大于其根结点的值。 二叉搜索树的子树也是二叉搜索树。 注意: 1.二叉查找树不能插入重复元素 2.中序遍历是一个递增的数列 3.高度越小查询效率越高 二叉排序…

RK3568平台开发系列讲解(驱动基础篇)RK 看门狗的使用

🚀返回专栏总目录 文章目录 一、简介二、DTS配置三、使用沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将对RK 看门狗的使用进行学习。 文章目录 一、简介二、DTS配置三、使用一、简介 看门狗(watchdog)是一个定时器,启动之后会开始计时。系统或者软件需要…

一个非常sb的报错……idea创建项目初始化失败……

今天在用idea创建项目时报错项目初始化失败; 一开始以为是配置原因,但后面尝试创建空项目都失败…… 觉得可能跟版本什么的无关,尝试重启、更新系统后,试着以管理员身份运行idea,问题解决了……………… 如果有报错信…

C语言——结构体初阶

哈喽,大家好,今天我们来学习C语言中的结构体,今天主要学习初阶结构体,后期我们将继续学习结构体进阶。 目录 1.结构体类型的声明 1.1 结构体的基础知识 1.2 结构的声明 1.3 结构成员的类型 1.4 结构体变量的定义和初始化 2. …

Cannot resolve plugin com.spotify:docker-maven-plugin:1.2.2 not found

问题 遇到这个错误是按照ruoyi-clou-plus把插件复制过来的,开始没有版本号,一直爆红,自己随便试了几个版本号,还是提示Cannot resolve plugin com.spotify:docker-maven-plugin not found 过程分析 百度了很多都说在settings.xml中加上 …

Tomcat安装与使用

Tomcat 是HTTP服务器,用于使用HTTP协议。 1、下载Tomcat 下载链接:https://tomcat.apache.org/ 进入官网后,根据自己想要下载的版本进行下载,我这里选择下载的版本是Tomcat 8. 点击选择自己想要下载的对应版本,下载Z…

基于Kruskal和Prim的最小生成树算法[matlab版本]

Kruskal算法 ------------------------------------ Kruskal算法为顺序取边的算法,复杂度与边的数量m有关, 为o(m log2 m).步骤如下: (1)初始化:最小生成树的边集A = ∅,对于图G中每个节点v ∈ V,生成 一个仅包含该节点的子树; (2)将图G中所有的边按照非降序方式排列; (…

YOLOv5、YOLOv7独家原创改进:独家首发最新EfficiCLNMS改进点,改进有效可以直接当做自己的原创改进点来写,新的增强预测帧

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv5、YOLOv7改进:独家首发最新EfficiCL-NMS改进点,新的增强预测帧率。 💡对自己数据集改进有效的话,可以直接当做自己的原创改进点来写!!!改…

Trace32 SRST和TRST、system.attach 和 system.up的区别

目录 TRST-Resets the JTAG TAP controller and the CPU internal debug logic SRST- Resets the CPU core and peripherals SYStem.Mode Down SYStem.Mode Nodebug SYStem.Mode Prepare SYStem.Mode Go SYStem.Mode Attach SYStem.Mode StandBy SYStem.Mode Up 下图为…

HLS入门-LED闪烁仿真

什么是HLS HLS(High-Level Synthesis)是一种硬件描述语言编程技术,它可以将高级语言(如C/C)转换为硬件描述语言(如VHDL或Verilog),以便将其用于FPGA设计中。 HLS有什么核心技术&am…

《嵌入式系统开发实践》实验二 进程与线程

一、 实验目的 了解Linux中进程和线程的概念; 了解多线程程序的基本原理; 了解pthread库; 掌握用system、exec函数族、fork函数创建进程; 掌握使用pthread库中的函数编写多线程程序。 二、 实验任务与要求 应用fork函数创建子进…

行云流水| CI 3.0 云原生构建全新上线

研发过程中,如何直观且准确地获悉代码提交后的质量状态? 引入持续集成,可以自动化的对代码进行代码检查、单元测试、编译构建、甚至部署与发布,大幅提升开发人员的效率。 腾讯云 CODING 推出 CI 3.0 ——云原生构建,是…

LabVIEW:强大的图形化编程工具

LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是由美国国家仪器公司(National Instruments)开发的一种直观而强大的工程软件,被广泛应用于各个领域的工程师和科学家之中。 与传统的编程语言相比&…

打包后定义配置文件针对.vue和.js文件不同配置方法

条件:需要打包后形成config文件,在打包后改变此配置文件即可改变配置,如api地址,vue中方法参数和条件。 (1)首先config文件要在public文件中建立,webpack打包后config文件才会出现在打包的dist文…

SpringMVC第四阶段:Controller中如何接收请求参数

Controller中如何接收请求参数 1、原生API参数类型 1.1、HttpServletRequest类 只需要在Controller的目标方法中, 直接写上HttpServletRequest对象即可获取 原生API的 request对象实例。 RequestMapping(value "/p1") public String param1(HttpServletRequest …

( 动态规划) 1035. 不相交的线 ——【Leetcode每日一题】

❓1035. 不相交的线 难度:中等 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足: nums1[i] nums2[j]且绘制的直线不…

Postman如何做接口测试?你居然还不知道

目录 Postman如何做接口测试1:如何导入 swagger 接口文档 Postman如何做接口测试2:如何切换测试环境 Postman如何做接口测试3:什么?postman 还可以做压力测试? Postman如何做接口测试4:如何自动添加请求…