3

我想知道使用 servlet 构建的 Web 应用程序可以同时处理多少个请求(使用 Tomcat 7)。我已经配置了 server.xml 文件的 maxThreads、acceptCount、minSpareThreads 属性。

我的问题是:我们是否也必须考虑底层操作系统?

例如:

maxThreads= 5;
acceptCount= 1;
OS= 1 processor with 4 cores; 

那么最多可以同时处理 4 个请求并等待 1 个请求?假设每个请求都需要一些时间才能完成。我们是否还必须考虑超线程?

4

2 回答 2

1

好问题,但没有直接的答案。您需要自己调整服务器参数并针对负载进行测试。

我脑海中浮现的问题很少。

time1.)处理每个请求需要多少时间。

2.) 有多少线程正在使用/配置thread pool

3.) 配置了多少server connections

操作系统,服务器在这方面不会发挥更大的作用。一旦你完成了参数设置,将它们推到了极限,那么我们甚至可能会想到硬件。

server.xml文件中,您指定maxThreads,它指定可以处理的最大并发请求数。如果未指定,则此属性设置为 200。

来自统计数据/博客

假设每个请求没有太多工作要做,一个在适度硬件上具有默认设置的单个 Tomcat 服务器应该可以轻松处理 2k 请求/秒。如果处理一个请求需要 500 多毫秒,您可能需要增加线程池中的线程数,并且您可能会开始突破限制。

于 2014-12-15T16:14:53.193 回答
1

仅凭猜测就很难得出这些数字。通常,您不必指定任何可能导致机器堵塞的内容。但与此同时,网络接口非常慢,以至于在网络拥塞之前很难拥塞 Web 服务器(除非每个请求都需要很长时间来处理)。

我的建议是不理会这些值并监视服务器以查看它在负载下的行为。如果可以的话,做一些负载测试——有一些很棒的工具可以模拟成千上万的用户同时使用你的服务器。

同样来自经验:数据库是瓶颈。将有几个查询将使一切停止。很难提前判断哪些是因为性能取决于很多因素:数据库中的数据量、索引、正在执行的实际 SQL、磁盘速度、数据库和 Web 服务器之间的网络等等。

于 2014-12-15T16:17:52.423 回答