springboot tomcat最大线程数与最大连接数解析

springboot tomcat最大线程数与最大连接数

首先看看springboot内置的tomcat,该如何配置这两个参数

# 在配置文件中添加如下内容
# tomcat最大线程数,默认为200
server.tomcat.max-threads=200
# tomcat最大连接数,默认为10000(网上的说法)
server.tomcat.max-connections=300

如何理解上面两个参数

为了方便理解,我这里使用了springboot编写了一个简单了的服务,包含一个模拟登录的接口,并使用jmeter进行测试,不了解jmeter如何使用的朋友可以翻看我的历史文章。部分代码如下

// java 代码
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UsersRepository usersRepository;

    @PostMapping("/login")
    public String login(Users user) throws InterruptedException {
        // 这里将线程挂起3秒,方便观察结果
        Thread.sleep(3000);
        Users checkUser = usersRepository.findByName(user.getName());
        if(checkUser == null)
            return "用户不存在";
        if(!checkUser.getPassword().equals(user.getPassword()))
            return "密码错误";
        System.out.println("用户:" + checkUser.getName() + ",登录成功");
        return "登录成功";
    }
}

接下来,设置jmeter中的线程数,分别测试以下场景返回的结果

注意:我在java代码中添加将线程挂起3秒的语句,实际的响应时间应该减去3秒

场景1:并发请求数 <= tomcat最大线程数200

设置jmeter并发请求数量为200

结果统计

结论:可以看到200个请求,平均响应时间为(3156-3000)=156ms,最小响应时间为23ms,最大响应时间为336ms,响应结果正常。

场景2:并发数 >tomcat最大线程数200,以下我将jmeter线程数设置为201,再来看看结果

看了下,平均值,最小值好像没什么异常,但是最大值却去到了5606毫秒,接近6S的时间。为什么会有个接近6S的最大值,原因很简单,因为tomcat最大的线程数为200,201的并发请求量,超出了并发处理的数量200,多出来的1个请求,需要等待某个处理中的请求处理完成。

这里我翻看了jmeter中大部分的http请求,验证了我的想法。大部分的http请求,响应时间都是3000多毫秒,只有最后一个响应的请求,响应的时间为5606毫秒,截图如下

场景3:请求数超过最大连接数300,这里将jmeter并发线程数设置为600

异常数量由原本的百分之0变成37.45%

可以看到有大量的没有正常响应的http请求,原因很简单,因为超过了tomcat设置的最大连接数,服务器拒绝了该次请求的连接

SpringBoot中修改tomcat最大连接数、最大线程数、最大等待数

1)maxThreads(最大线程数)

每一次HTTP请求到达Web服务器,Web服务器都会创建一个线程来处理该请求,该参数决定了应用服务同时可以处理多少个HTTP请求,tomcat默认为200;

2)accepCount(最大等待数)

当调用Web服务的HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100.如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused);

3)maxConnections(最大连接数)

这个参数是指在同一时间,tomcat能够接受的最大连接数。一般这个值要大于maxThreads+acceptCount。

根据公司用户量及机器配置信息,公司的最大连接数、最大线程数和最大等待数优化为:

   #最大连接数
   server.tomcat.max-connections=2000
   #最大线程数
   server.tomcat.max-threads=1000
   #最大等待数
   server.tomcat.accept-count=800

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 基于tomcat的连接数与线程池详解

    前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 详解Tomcat配置文件server.xml 中写到过:Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据:然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把产生的Request和Response对象传给Engine.当Engine处理完请求后,也会通过Conn

  • SpringBoot内置tomcat调优测试优化

    问题 怎么配置springBoot 内置tomcat,才能使得自己的服务效率更高呢? 基础配置 Spring Boot 能支持的最大并发量主要看其对Tomcat的设置,可以在配置文件中对其进行更改.我们可以看到默认设置中,Tomcat的最大线程数是200,最大连接数是10000. 这个不同SpringBoot 版本可能有所细微差别.本文测试基于Springboot 2.0.7.RELEASE 默认配置 /** * Maximum amount of worker threads. */ priv

  • SpringBoot整合Tomcat连接池的使用

    连接池大小及性能选项 maxActive:最主要参数,配置连接池同时能维持的最大连接数,如果客户端理论上需要100个连接,则这个值设为100. maxIdle:如果客户端一段时间内不需要使用连接,如果一直把所有连接池中的所有连接都维持在活动状态是很浪费资源的,maxIdle这个选项告诉tomcat,如果客户端没有需求,那么最多维持maxIdle个空闲连接. minIdle:和maxIdle类似,maxIdle告诉tomcat最多维持多少个空闲连接,minIdle告诉tomcat即使客户端没有需求

  • Spring Boot如何优化内嵌的Tomcat示例详解

    前言 本文主要给大家介绍了关于Spring Boot优化内嵌Tomcat的相关内容,分享出来供大家参考学习,下面话不多说了,来一看看详细的介绍吧. Spring Boot测试版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE&l

  • springboot tomcat最大线程数与最大连接数解析

    springboot tomcat最大线程数与最大连接数 首先看看springboot内置的tomcat,该如何配置这两个参数 # 在配置文件中添加如下内容 # tomcat最大线程数,默认为200 server.tomcat.max-threads=200 # tomcat最大连接数,默认为10000(网上的说法) server.tomcat.max-connections=300 如何理解上面两个参数 为了方便理解,我这里使用了springboot编写了一个简单了的服务,包含一个模拟登录的接

  • springboot内置tomcat调优并发线程数解析

    目录 前言 参数 线程池核心线程数 线程池最大线程数 请求最大连接数 accept-count tomcat线程池处理机制 总结 前言 本文解析springboot内置tomcat调优并发线程数的一些参数,并结合源码进行分析 参数 线程池核心线程数 server.tomcat.min-spare-threads:该参数为tomcat处理业务的核心线程数大小,默认值为10 线程池最大线程数 server.tomcat.max-threads:该参数为tomcat处理业务的最大线程数大小,默认值为2

  • Tomcat配置访问日志和线程数的实现步骤

    目录 1.tomcat access log的配置 1.access log的配置 2.查看磁盘上的日志文件 3.accesslog参数解释: 2.Tomcat配置线程数 3.实时查看tomcat线程数 1.tomcat access log的配置 1.access log的配置 server: tomcat: accesslog: enabled: true #是否开启日志 directory: /home/admin/arpro-backend-prod/logs/arpro-monitor

  • 从连接器组件看Tomcat的线程模型——BIO模式(推荐)

    在高版本的Tomcat中,默认的模式都是使用NIO模式,在Tomcat 9中,BIO模式的实现Http11Protocol甚至都已经被删除了.但是了解BIO的工作机制以及其优缺点对学习其他模式有有帮助.只有对比后,你才能知道其他模式的优势在哪里. Http11Protocol表示阻塞式的HTTP协议的通信,它包含从套接字连接接收.处理.响应客户端的整个过程.它主要包含JIoEndpoint组件和Http11Processor组件.启动时,JIoEndpoint组件将启动某个端口的监听,一个请求到

  • 详解如何更改SpringBoot TomCat运行方式

    1. 为什么要更改SpringBoot运行方式? Tomcat Connector(连接器)有三种运行模式:bio nio apr bio(blocking I/O) 即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包),是基于JAVA的HTTP/1.1连接器,Tomcat7以下版本在默认情况下是以bio模式运行的.一般而言,bio模式是三种运行模式中性能最低的一种.我们可以通过Tomcat Manager来查看服务器的当前状态.(Tomcat7

  • 浅析Tomcat使用线程池配置高并发连接

    目录 Tomcat使用线程池配置高并发连接 1:配置executor属性 2:配置Connector 一.Tomcat内存优化 1.JAVA_OPTS参数说明 二.Tomcat并发优化 1.Tomcat连接相关参数 1.参数说明 2.Tomcat中的配置示例 2.调整连接器connector的并发处理能力 1.参数说明 2.Tomcat中的配置示例 3.Tomcat缓存优化 1.参数说明 2.Tomcat中的配置示例 4.参考配置 1.旧有的配置 2.更改后的配置 Tomcat使用线程池配置高并

  • MySQL服务器线程数的查看方法详解

    本文实例讲述了MySQL服务器线程数的查看方法.分享给大家供大家参考,具体如下: mysql重启命令: /etc/init.d/mysql restart MySQL服务器的线程数需要在一个合理的范围之内,这样才能保证MySQL服务器健康平稳地运行.Threads_created表示创建过的线程数,通过查看Threads_created就可以查看MySQL服务器的进程状态. mysql> show global status like 'Thread%'; +------------------

  • SpringBoot 多任务并行+线程池处理的实现

    前言 前几篇文章着重介绍了后端服务数据库和多线程并行处理优化,并示例了改造前后的伪代码逻辑.当然了,优化是无止境的,前人栽树后人乘凉.作为我们开发者来说,既然站在了巨人的肩膀上,就要写出更加优化的程序. SpringBoot开发案例之JdbcTemplate批量操作 SpringBoot开发案例之CountDownLatch多任务并行处理 改造 理论上讲,线程越多程序可能更快,但是在实际使用中我们需要考虑到线程本身的创建以及销毁的资源消耗,以及保护操作系统本身的目的.我们通常需要将线程限制在一定

  • Tomcat使用线程池处理远程并发请求的方法

    通过了解学习tomcat如何处理并发请求,了解到线程池,锁,队列,unsafe类,下面的主要代码来自 java-jre: sun.misc.Unsafe java.util.concurrent.ThreadPoolExecutor java.util.concurrent.ThreadPoolExecutor.Worker java.util.concurrent.locks.AbstractQueuedSynchronizer java.util.concurrent.locks.Abstr

  • Springboot应用中线程池配置详细教程(最新2021版)

    前言:日常开发中我们常用ThreadPoolExecutor提供的线程池服务帮我们管理线程,在Springboot中更是提供了@Async注解来简化业务逻辑提交到线程池中执行的过程.由于Springboot中默认设置的corePoolSize=1和queyeCapacity=Integer.MAX_VALUE,相当于采用单线程处理所有任务,这就与多线程的目的背道而驰,所以这就要求我们在使用@Async注解时要配置线程池.本文就讲述下Springboot应用下的线程池配置. 背景知识:Spring

随机推荐