5

想知道如何增加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" />

你能帮我找出摆脱这个的最好和最简单的方法吗?

谢谢,西里什。

4

1 回答 1

14

创建大量线程1并接受大量请求并不意味着你的服务器就能处理这些请求

如果您有 N 个线程并且只有 M 个物理处理器/内核,那么每个线程将获得 1 个处理器 ifM >= N和一个平均M / N处理器 if M < N。假设您有 N 个请求,每个请求都在 1 个线程上运行,每个请求需要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 - 你需要对你的系统进行一些性能调整,但如果减少它甚至进一步改进事情,我不会感到惊讶。这将取决于您的硬件、您的应用程序和(我希望)您的后端数据库。

于 2012-09-26T14:02:29.350 回答