当前位置: 首页 > 图灵资讯 > 技术篇> tomcat的maxThreads、acceptCount(最大线程数、最大排队数)

tomcat的maxThreads、acceptCount(最大线程数、最大排队数)

来源:图灵教育
时间:2023-06-14 09:48:06

tomcatmaxThreads、acceptCount(最大线程数,最大排队数)

omcat Conector配置如下

<Connector port="8080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443"               maxThreads="800" acceptCount="1000"/>

最后两个参数的含义如下:

maxThreads:tomcat启动的最大线程数,即同时处理的任务数,默认值为200

acceptCount:当tomcat启动的线程数达到最大值时,默认值为100

这两个值是如何工作的,请看以下三种情况

情况1:此时tomcat启动的线程数未达到maxthreads,tomcat将启动一个线程来处理此请求。

情况2:此时tomcat启动的线程数已达到maxthreads,tomcat将此请求放入等待队列,等待空闲线程。

情况3:此时tomcat启动的线程数已达到maxthreads,等待队列中的请求数已达到acceptcount。此时tomcat将直接拒绝请求,并返回conectiont refused

如何配置maxthreads?

一般服务器操作包括量:1计算(主要消耗cpu),2等待(io、数据库等)

在第一种极端情况下,如果我们的操作是纯计算,系统响应时间的主要限制是cpu的计算能力。此时,maxthreads应尽可能小,减少同时争夺cpu的线程数量,从而提高计算效率和系统的整体处理能力。

在第二种极端情况下,如果我们的操作纯粹是IO或数据库,响应时间的主要限制将成为等待外部资源。此时,maxthreads应尽可能大,以便 同时提高处理要求的数量,从而提高系统的整体处理能力。在这种情况下,由于tomcat同时处理的请求量相对较大,因此需要注意tomcat的虚拟机 openn存储设置和linux 限制file。

我在测试中遇到了一个问题。我设置了3000,比如maxthreads。当服务线程数量达到一定程度时,一般在2000出头,单个请求的响应时间会急剧增加。

百思不解这就是为什么,到处寻找答案都没有结果,最后我总结了cpu在线程切换时消耗的时间随着线程数量的增加而增加,

cpu在这2000多个线程中直接切换大部分时间,当然cpu没有时间处理我们的程序。

我一直认为多线程=高效率。。事实上,多线程本身并不能提高cpu的效率。过多的线程会降低cpu的效率。

当cpu核心数时<当线程数量时,cpu需要直接在多个线程之间来回切换,以确保每个线程都能获得cpu时间,即我们通常所说的并发执行。

所以maxthreads的配置绝对不是越大越好。

在实际应用中,我们的操作将包括上述两种类型(计算、等待),因此maxthreads的配置没有最佳值,必须根据具体情况进行配置。

最好的方法是在不断测试的基础上,不断调整和优化,以获得最合理的配置。

acceptcount的配置一般和maxthreads一样大,应该根据应用的访问峰值和平均值来权衡。

如果设置较小,可以确保接受的请求相应得更快,但超过的请求可能会被直接拒绝

若设置较大,可能会出现大量要求加班的情况,因为我们系统的处理能力是一定的。