当前位置:   article > 正文

不同性能,不同机器,不同线程池参数 压力测试对比实验_不通机型 stream压测结果对比,怎么评判

不通机型 stream压测结果对比,怎么评判

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

硬件配置对比

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/994934
推荐阅读
相关标签
  

闽ICP备14008679号