不同性能,不同机器,不同线程池参数 压力测试对比实验
硬件配置对比
特性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的容量,例如LinkedBlockingQueue或ArrayBlockingQueue。
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线程池的配置则更为通用,适用于多种并发任务处理场景。
版权归原作者 豪坚强 所有, 如有侵权,请联系我们删除。