增加tomcat 7中的并发连接数

时间:2012-09-26 11:36:00

标签: java tomcat tomcat7

想知道如何增加tomcat 7中的并发连接数。我做了一些研究,从apache文档中发现将值设置为acceptCount,maxConnections并增加maxThreads就可以了,但是一旦尝试,我只能提交1000个请求中的500个。以下是来自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" />

请你帮我找出摆脱这个的最佳方法。?

谢谢, Sirish。

1 个答案:

答案 0 :(得分:13)

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

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

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

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


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

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

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