tomcat的maxThreads、acceptCount(最大线程数、最大列队数)
<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会直接拒绝此次请求,
maxThreads如何配置
一般的服务器操作都包括量方面:1计算(主要消耗cpu),2等待(io、数据库等)
第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。
第二种极端情况,如果我们的操作纯粹是IO或者数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设的大,这样才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内存设置和linux的open file限制。
我在测试时遇到一个问题,maxThreads我设置的比较大比如3000,当服务的线程数大到一定程度时,一般是2000出头,单次请求的响应时间就会急剧的增加,
百思不得其解这是为什么,四处寻求答案无果,最后我总结的原因可能是cpu在线程切换时消耗的时间随着线程数量的增加越来越大,
cpu把大多数时间都用来在这2000多个线程直接切换上了,当然cpu就没有时间来处理我们的程序了。
以前一直简单的认为多线程=高效率。。其实多线程本身并不能提高cpu效率,线程过多反而会降低cpu效率。
当cpu核心数<线程数时,cpu就需要在多个线程直接来回切换,以保证每个线程都会获得cpu时间,即通常我们说的并发执行。
所以maxThreads的配置绝对不是越大越好。
现实应用中,我们的操作都会包含以上两种类型(计算、等待),所以maxThreads的配置并没有一个最优值,一定要根据具体情况来配置。
最好的做法是:在不断测试的基础上,不断调整、优化,才能得到最合理的配置。
acceptCount的配置
我一般是设置的跟maxThreads一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。
如果设的较小,可以保证接受的请求较快相应,但是超出的请求可能就直接被拒绝
如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的。
分享到:
相关推荐
图解 Tomcat maxConnections、maxThreads、acceptCount
### Linux 下 Tomcat 优化设置最大连接数及内存 JConsole 监控 #### 一、Tomcat 内存优化 ##### 1.1 基本原理 在启动 Java 应用程序时,JVM(Java 虚拟机)会为应用程序分配一定的初始内存和最大内存。这些设置对...
`maxThreads`定义了最大并发线程数,当所有线程都在忙时,新来的请求将被阻塞,直到有线程可用。`minSpareThreads`则指定了空闲线程的最小数量,确保了足够的线程资源随时待命。 3. **线程与Servlet的关系** 每个...
maxThreads="1000" 最大线程数,因为每个请求Tomcat都会使用一个线程来处理,所以代表最大同时请求数 8. 可以粗略认为,同一时间点(如1毫秒内)最大同时并发数 = acceptCount + maxThreads, 9. 但实际上每秒处理的...
Tomcat的并发能力主要受到maxThreads参数的控制,这是一个设定最大并发处理线程数的参数。初始情况下,Tomcat的并发数可能仅为40左右,但通过调整此参数,可以获得显著的提升。 在server.xml中对maxThreads值进行...
`maxThreads`参数定义了服务器可以同时处理的最大线程数,即并发请求的最大数目。`acceptCount`参数则表示当达到`maxThreads`时,服务器还能接受并放入队列等待处理的连接数。适当调整这两个参数可以有效缓解服务器...
maxThreads="600" 指定了最大线程数为 600,minSpareThreads="100" 指定了初始化时创建的线程数为 100,maxSpareThreads="500" 指定了一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程,...
- **最大线程数配置**:在`conf/server.xml`中,可以通过`<Connector>`标签的`maxThreads`属性设定Tomcat的最大线程数,以控制并发处理请求的能力。`minSpareThreads`和`maxSpareThreads`分别定义了最小和最大空闲...
* 最大线程数(maxThreads):最大线程数决定了TOMCAT服务器的最大线程数。 * 最少工作线程数(minSpareThreads):最少工作线程数决定了TOMCAT服务器的最少工作线程数。 * 最大工作线程数(maxSpareThreads):最大...
合理设定最大线程数(-XX:MaxThreads)和最小线程数(-XX:InitialThreadCount),可以确保系统资源的高效利用。 2. **请求队列长度**:当线程池满时,新的请求会被放入队列等待。设置适当的队列长度可以防止拒绝服务。 ...
标题中的“Tomcat配置连接数(优化)”指的是在Apache Tomcat服务器中调整与处理并发请求相关的设置,以提升服务器的性能和稳定性。这通常涉及到调整最大连接数、线程池大小、超时时间等核心参数。在高并发场景下,...
其中,port 指定了 Tomcat 的监听端口,protocol 指定了 Connector 的协议,connectionTimeout 指定了网络连接超时时间,maxThreads 指定了 Tomcat 可创建的最大线程数,minSpareThreads 指定了 Tomcat 初始化时创建...
这个值表示 Tomcat 可创建的最大的线程数。 * acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。 * connectionTimeout:网络连接超时,单位...
* maxThreads:最大线程数,默认为200。 * minSpareThreads:最小活跃线程数,默认为25。 * maxIdleTime:空闲线程等待时间,默认为60000(1 minute)。 * maxQueueSize:最大的等待队里数,默认为Integer.MAX_VALUE...
`ThreadLimit`和`ServerLimit`控制最大线程和服务器实例数,`StartServers`定义启动时的服务器实例数,`MaxClients`设定可服务的最大客户端连接数,`MinSpareThreads`和`MaxSpareThreads`设定备用线程的最小和最大值...
在Tomcat 5中,这些参数变为`maxThreads`,用于设置最大线程数,以及`minSpareThreads`和`maxSpareThreads`,分别代表初始化创建的线程数和允许的最大空闲线程数。 例如,如果你的应用在正常情况下每秒处理5个请求...
- `maxThreads`:最大线程数,表示Tomcat可以同时处理的请求的最大并发数。默认值200,可根据服务器性能进行调整。 - `minSpareThreads`:最小空闲线程数,Tomcat启动时初始化的线程数,防止请求到达时需要等待...
- `bufferSize`: 每个请求的缓冲区大小,通常与maxThreads(最大线程数)相乘,来确定能够处理的总缓冲区大小。 - `compression`: 是否启用GZIP压缩输出。 - `compressableMimeTypes`: 可以被压缩的MIME类型列表,如...