`
丶折子戏
  • 浏览: 12646 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

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

阅读更多

tomcat 6的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一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。
如果设的较小,可以保证接受的请求较快相应,但是超出的请求可能就直接被拒绝
如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的。

 

分享到:
评论

相关推荐

    tomcat中多线程对于servlet处理的4篇资料

    `maxThreads`定义了最大并发线程数,当所有线程都在忙时,新来的请求将被阻塞,直到有线程可用。`minSpareThreads`则指定了空闲线程的最小数量,确保了足够的线程资源随时待命。 3. **线程与Servlet的关系** 每个...

    linux下tomcat优化设置最大连接数内存jconsole监控.docx

    ### Linux 下 Tomcat 优化设置最大连接数及内存 JConsole 监控 #### 一、Tomcat 内存优化 ##### 1.1 基本原理 在启动 Java 应用程序时,JVM(Java 虚拟机)会为应用程序分配一定的初始内存和最大内存。这些设置对...

    Tomcat6_优化_方案

    maxThreads="1000" 最大线程数,因为每个请求Tomcat都会使用一个线程来处理,所以代表最大同时请求数 8. 可以粗略认为,同一时间点(如1毫秒内)最大同时并发数 = acceptCount + maxThreads, 9. 但实际上每秒处理的...

    调整Tomcat的并发线程

    Tomcat的并发能力主要受到maxThreads参数的控制,这是一个设定最大并发处理线程数的参数。初始情况下,Tomcat的并发数可能仅为40左右,但通过调整此参数,可以获得显著的提升。 在server.xml中对maxThreads值进行...

    JBOSS\Tomcat最大连接数配置和jvm内存配置.docx

    `maxThreads`参数定义了服务器可以同时处理的最大线程数,即并发请求的最大数目。`acceptCount`参数则表示当达到`maxThreads`时,服务器还能接受并放入队列等待处理的连接数。适当调整这两个参数可以有效缓解服务器...

    tomcat7安装使用及jvm连接数参数调优

    maxThreads="600" 指定了最大线程数为 600,minSpareThreads="100" 指定了初始化时创建的线程数为 100,maxSpareThreads="500" 指定了一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程,...

    Tomcat服务器线程控制配置以及JMeter进行WebService测试

    - **最大排队数配置**:`acceptCount`属性定义了当所有工作线程都在处理请求时,允许等待的新连接数。超过这个数的请求将被拒绝,以防止服务器过度负荷。 2. **监控Tomcat内存使用**: - **添加管理员用户**:在`...

    JAVA-WEB应用服务器调优方案.pptx

    TOMCAT服务器参数包括最大线程数、最少工作线程数、最大工作线程数、允许排队队列中的线程数等。 * 最大线程数(maxThreads):最大线程数决定了TOMCAT服务器的最大线程数。 * 最少工作线程数(minSpareThreads):...

    Tomcat面试题 14道.pdf

    其中,port 指定了 Tomcat 的监听端口,protocol 指定了 Connector 的协议,connectionTimeout 指定了网络连接超时时间,maxThreads 指定了 Tomcat 可创建的最大线程数,minSpareThreads 指定了 Tomcat 初始化时创建...

    Tomcat优化相关问题.pdf

    这个值表示 Tomcat 可创建的最大的线程数。 * acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。 * connectionTimeout:网络连接超时,单位...

    Tomcat性能调整

    在Tomcat 5中,这些参数变为`maxThreads`,用于设置最大线程数,以及`minSpareThreads`和`maxSpareThreads`,分别代表初始化创建的线程数和允许的最大空闲线程数。 例如,如果你的应用在正常情况下每秒处理5个请求...

    Tomcat协同配置参考

    `maxThreads`、`minSpareThreads`和`maxSpareThreads`分别设定最大和最小的连接线程数,以优化并发处理能力。`acceptCount`定义了等待连接的最大数量,`connectionTimeout`是超时时间,`disableUploadTimeout`关闭...

    Tomcat3源码.pdf

    - `acceptCount`: 设置当所有可能的请求处理线程都在使用中时,可以排队的最大等待连接数。 - `address`: 绑定 Connector 接受连接的地址,例如***.*.*.*表示仅接受本地连接。 - `bufferSize`: 每个请求的缓冲区大小...

    Tomcat面试题.pdf

    - `maxThreads`:最大线程数,表示Tomcat可以同时处理的请求的最大并发数。默认值200,可根据服务器性能进行调整。 - `minSpareThreads`:最小空闲线程数,Tomcat启动时初始化的线程数,防止请求到达时需要等待...

    使用visualvm工具进行tomcat性能调优和性能监控.docx

    这个值表示 Tomcat 可创建的最大的线程数。默认值 150。 * acceptCount:指定当全部可以使用的处理恳求的线程数都被使用时,可以放处处理队列中的恳求数,超过这个数的恳求将不予处理。默认值 10。 * ...

    Tomcat6参数设置

    - **maxThreads="800"**:与`Executor`中的`maxThreads`不同,这里的`maxThreads`指定了`Connector`可以处理的最大线程数。 - **minSpareThreads="10"**:最小空闲线程数。 - **maxSpareThreads="50"**:最大空闲...

Global site tag (gtag.js) - Google Analytics