不同性能,不同机器,不同线程池参数 压力测试对比实验

不同性能,不同机器,不同线程池参数 压力测试对比实验

硬件配置对比

特性Macbook Air M1虚拟机Ubuntu
CPU8核 (4性能核 + 4能效核)Intel Core i5-12400, 6核心
内存8GB6GB
环境Docker容器Docker容器

一、比较Mac和虚拟机中相同类型请求的并发能力

6核心6GB

并发100

Ubuntu

M1

并发1000

Ubuntu

M1

并发5000

Ubuntu

M1

并发1w

Ubuntu

M1

二:同一虚拟机不同性能对比

4核心4GB

并发100

并发1000

并发5000

并发10000

4核心6GB

并发100

并发1000

并发5000

并发10000

三、不同Tomcat最大线程间的对比

SpringBoot版本2,3.12 Tomcat默认连接数是8192 默认核心线程数200(M1)

线程数200

线程数500

线程数1000

知识点记录

在配置Tomcat内置的线程池时,可以设置多个参数来优化服务器的性能和响应能力。这些参数通常在application.propertiesapplication.yml文件中配置,或者直接在Tomcat的server.xml配置文件中设置。这些参数影响Tomcat线程池的行为方式,与Java标准线程池(如ThreadPoolExecutor)中的参数类似,但有一些特定的差异。

Tomcat线程池的关键参数

1. maxThreads(最大线程数)
  • Tomcat: 此参数设置可用于处理请求的最大线程数。超出此数量的请求将被放在等待队列中。

  • Java: 类似于ThreadPoolExecutor中的maximumPoolSize,这是池中允许的最大线程数。

2. minSpareThreads(最小空闲线程数)
  • Tomcat: 定义了池中应保持空闲的最小线程数。Tomcat会确保即使在低负载时也有这么多线程处于活跃状态,以快速响应新的请求。

  • Java: 对应于ThreadPoolExecutor中的corePoolSize,即即使空闲也始终保持在池中的线程数。

3. maxIdleTime(最大空闲时间)
  • Tomcat: 线程空闲超过此时间后,将被回收。这可以防止在负载较低时资源浪费。

  • Java: 在ThreadPoolExecutor中,这类似于keepAliveTime,如果池中的线程数超过corePoolSize,这些超出部分的线程在空闲指定时间后会被终止。

4. maxQueueSize(最大队列大小)
  • Tomcat: 设置等待队列的最大长度,超出这个长度的请求可能会被服务器拒绝或超时。

  • Java: 在ThreadPoolExecutor中对应的是BlockingQueue的容量,例如LinkedBlockingQueueArrayBlockingQueue

5. acceptCount
  • Tomcat: 当所有可以使用的处理请求的线程都被使用时,这个参数定义了可以放在连接请求队列中的最大连接数。

  • Java: 没有直接对应,但可以视为是处理任务前的另一层队列的大小限制。

6. connectionTimeout
  • Tomcat: 这是服务器等待客户端发送请求数据的超时时间。如果在此时间内没有数据被接收,连接将被关闭。

  • Java: 这更类似于网络编程中的超时设置,而非线程池的直接配置。

示例:Tomcat配置与Java线程池的对应关系

Tomcat:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           maxThreads="200"
           minSpareThreads="10"
           acceptCount="100" />

Java线程池:

int corePoolSize = 10;  // minSpareThreads
int maximumPoolSize = 200;  // maxThreads
long keepAliveTime = 60000;  // maxIdleTime
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(100);  // maxQueueSize
​
ThreadPoolExecutor executor = new ThreadPoolExecutor(
    corePoolSize,
    maximumPoolSize,
    keepAliveTime,
    TimeUnit.MILLISECONDS,
    workQueue
);

通过对比这两种配置,可以看到Tomcat线程池和Java线程池配置在概念上是相似的,但Tomcat的配置还包括了针对网络连接特有的参数。这些设置帮助优化Tomcat作为Web服务器处理HTTP请求的能力,而Java线程池的配置则更为通用,适用于多种并发任务处理场景。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值