tomcat的maxThreads、acceptCount(最大线程数、最大排队数)
url: http://blog.sina.com.cn/s/blog_605f5b4f01012ljj.html
tomcat 的Connector配置如下
<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会直接拒绝此次请求,返回connection refused
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一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。
如果设的较小,可以保证接受的请求较快相应,但是超出的请求可能就直接被拒绝
如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的。
相关推荐
- **最大排队数配置**:`acceptCount`属性定义了当所有工作线程都在处理请求时,允许等待的新连接数。超过这个数的请求将被拒绝,以防止服务器过度负荷。 2. **监控Tomcat内存使用**: - **添加管理员用户**:在`...
Tomcat的并发能力主要受到maxThreads参数的控制,这是一个设定最大并发处理线程数的参数。初始情况下,Tomcat的并发数可能仅为40左右,但通过调整此参数,可以获得显著的提升。 在server.xml中对maxThreads值进行...
maxThreads="1000" 最大线程数,因为每个请求Tomcat都会使用一个线程来处理,所以代表最大同时请求数 8. 可以粗略认为,同一时间点(如1毫秒内)最大同时并发数 = acceptCount + maxThreads, 9. 但实际上每秒处理的...
TOMCAT服务器参数包括最大线程数、最少工作线程数、最大工作线程数、允许排队队列中的线程数等。 * 最大线程数(maxThreads):最大线程数决定了TOMCAT服务器的最大线程数。 * 最少工作线程数(minSpareThreads):...
其中,minProcessors 参数决定Tomcat启动时的最小线程数,maxProcessors 控制并发处理的最大请求数量,而 acceptCount 则确定了系统在关闭连接之前的排队请求数量。调整这些参数的目的是为了提升系统的并发处理能力...
3. **最大线程数(server.tomcat.max-threads)**:这指定了Tomcat的工作线程池的最大线程数,设置为300,确保服务器能够处理多个并发请求。 4. **编码方式(server.tomcat.uri-encoding)**:设置为UTF-8,确保URL请求...
- `maxThreads`:设定Tomcat可创建的最大线程数,决定并发处理能力。 - `minSpareThreads`:Tomcat启动时创建的最小线程数,确保服务快速响应。 - `maxSpareThreads`:超过此值,Tomcat将关闭不再需要的线程。 -...
- `acceptCount`: 设置当所有可能的请求处理线程都在使用中时,可以排队的最大等待连接数。 - `address`: 绑定 Connector 接受连接的地址,例如***.*.*.*表示仅接受本地连接。 - `bufferSize`: 每个请求的缓冲区大小...
- `maxThreads`:最大线程数,决定了Tomcat同时处理请求的能力。根据服务器性能和预期并发量调整,一般建议400-500。 - `minSpareThreads`:最小空闲线程数,初始化时创建的线程数。保持一定数量的空闲线程可以...
4. `acceptCount`:当所有线程都在处理请求时,允许排队等待的连接数。设置为100,防止过多的连接请求被拒绝。 5. `connectionTimeout`:定义了服务器等待客户端完成请求的时间,以毫秒计。默认值是30000(30秒),...
- **`maxThreads`**:表示服务器能同时处理的最大线程数(即并发连接数)。例如,`maxThreads="150"` 表示最多可以同时处理150个连接。 - **`minSpareThreads`**:表示即使没有客户端请求时,Tomcat也会保持活跃的...
- `maxThreads`:表示最大线程数,决定了Tomcat能够同时处理的请求数量。根据实际负载情况调整,过高会增加线程切换开销,过低则可能导致请求排队。 - `minSpareThreads`与`maxSpareThreads`:分别表示最小空闲线程...
9. acceptCount:此属性定义当所有的可能处理的线程都正在使用时,在队列中排队的最大请求数。超过这个数目的请求将被拒绝,默认值为10。 ***pressableMimeType:此属性指定可以被压缩的MIME类型的列表,默认包括...
假如一个场景,用户上传文件,某些用户网速较慢,同时存在100个这样的用户,如果BIO且最大线程设为100会导致线程用完。NIO怎么来解决这个问题? 本实例采用tomcat8作为容器,开启异步servlet读写事件,解决高并发IO...
- **maxSpareThreads**:设置最大空闲线程数为75,以避免过度创建线程造成的资源浪费。 - **acceptCount**:设置为100,表示当所有可用线程都在处理请求时,最多可以接受100个新连接的请求排队等待,超过这个数量的...
`URIEncoding`指定URL编码,`maxThreads`设置最大线程数,`maxKeepAliveRequests`定义一个连接允许的最大请求数,`acceptCount`是当所有可用请求处理线程都被占用时,新到达的请求可以排队的最大数量。 在`...
- **`acceptCount`**:等待队列的长度,即当所有可用线程都在处理请求时,可以排队等待的最大请求数量。 - **`maxIdleTime`**:线程闲置时间,如果一个线程在指定时间内没有被使用,将会被关闭。 - **`enableLookups...