增加tomcat 7中的并发连接数

Sir*_*ish 5 java tomcat tomcat7

想知道如何增加tomcat 7中的并发连接数.我做了一些研究,并从apache文档中发现将值设置为acceptCount,maxConnections并增加maxThreads就可以了,但是一旦尝试,我只能提交500个请求1000.以下是来自server.xml文件的片段 -

      <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="2000" acceptCount="1000" maxConnections="1000"
       scheme="https" secure="true"
       keystoreFile="certs/tomcat.keystore" keystorePass="xxxxxxxx"
       clientAuth="false" sslProtocol="TLS" server="Apache" />
Run Code Online (Sandbox Code Playgroud)

能帮我找到最好的方法来摆脱这个吗?

谢谢,Sirish.

Ste*_*n C 13

创建大量线程1并接受大量请求并不意味着您的服务器将能够处理请求

如果您有N个线程且只有M个物理处理器/核心,则每个线程将获得1个处理器,如果M >= N是平均M / N处理器M < N.假设每个运行在1个线程上的N个请求,每个请求需要R几秒的CPU时间.T运行一个请求所用的平均时间是T = Min(R, R * N / M) seconds.很明显,当您增加N(活动线程数和活动请求数)时T,每个请求的平均流逝时间会按比例增加.

除此之外,如果你有很多线程,他们都将使用内存,并且所有人都将争夺对共享数据结构......或数据库的访问权.所有这些额外的资源使用和争用都以各种方式增加了整个系统的开销.

因此,我怀疑正在发生的是,每个尝试同时处理请求的线程数量,时间T开始接近客户端或服务器端请求超时.(并注意调度程序的变幻莫测等意味着任何给定请求的实际时间可能小于或大大超过平均值.)当请求超时时,这反过来会降低请求的吞吐量已完成,因为每次超时请求所执行的工作(通常)都被浪费了.


除非请求需要与慢速外部服务交谈,否则我建议您将线程数减少到不超过200 ... Tomcat默认值为2.我希望这会增加系统吞吐量.它不一定会让您处理在该时间段内启动的所有1000个请求,但我预测它将增加成功处理的请求数.

1 - 实际上,将线程数增加到1000甚至不意味着您将能够接受1000个请求.如果有数百个线程处于RUNNABLE状态,那么Tomcat的侦听器线程(调用的线程ServerSocket.accept())可能会缺乏CPU,并且无法跟上请求到达率.

2 - 你需要在你的系统上进行一些性能调整,但是如果减少它甚至进一步改进了东西,我也不会感到惊讶.这取决于您的硬件,应用程序和(我期望)您的后端数据库.

  • 我同意@StephenC,我有生产中的应用程序(具有相当高的流量),我们已将最大线程数减少到20,因为它们的回答速度足够快,以至于同时处理的请求数平均约为1或2(受监控)通过JMX),当发生不良事件(无响应的Web服务,异常长的GC暂停)时,我们不会突然有200个并发请求需要管理内存开销,这实际上会使情况恶化.存在上限,因此应用程序不会耗尽资源,也不会限制吞吐量. (3认同)