0


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

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

硬件配置对比

特性Macbook Air M1虚拟机UbuntuCPU8核 (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.properties

application.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线程池的配置则更为通用,适用于多种并发任务处理场景。

标签: 压力测试 web

本文转载自: https://blog.csdn.net/chenzh_/article/details/140531527
版权归原作者 豪坚强 所有, 如有侵权,请联系我们删除。

“不同性能,不同机器,不同线程池参数 压力测试对比实验”的评论:

还没有评论