如何选择HTTP Servlet容器的最大线程数?

时间:2020-03-06 14:25:27  来源:igfitidea点击:

我正在开发一个宁静的Web服务,该服务在Jetty中作为servlet(使用阻塞IO)运行。找出最大线程的最佳设置似乎很困难。

是否有研究公式可以根据其余设置的一些易于测量的特征来确定最大线程数?

解决方案

不,那里没有。使线程数受到限制并受到控制,以免超出系统资源,Java的限制通常是100-200个活动线程。

做到这一点的好方法是使用java.util.concurrent中的Executors。

答案取决于我们希望处理的最大同时连接数。我们应该允许尽可能多的线程作为我们期望的连接。

andreasmk2关于线程数的信息不正确。我运行的应用程序具有1000个线程,并且系统资源没有问题;当然,这取决于系统的具体情况。我们会遇到系统限制,而不是Java限制。

我的问题是我不知道如何对同时连接的数量形成合理的期望。大概在某个时候,拒绝新的连接总比放慢一切的速度要好,因为有太多的请求正在处理中。

现实的工作负载很难模拟,这就是为什么我要寻找别人已经研究过的公式的原因。

(明显的上限是最大堆大小除以处理请求所需的最小内存量,但是即使在具有垃圾收集器的环境中,这也很难衡量。)

非常简单原始的一个:

max_number_of_threads = CPU数量* C

其中C取决于应用程序的其他因素:-)

问自己以下问题:

  • 应用程序将占用大量CPU(较低的C)还是花大量时间等待第三个系统(较高的C)?
  • 我们是否需要更快的响应时间(较低的C),或者即使每个请求花费更长的时间(较高的C)也能够一次为多个用户服务?

通常我将C设置得较低,例如2 10.

谢谢。我读此书是因为没有任何简单的公式。 :-(

(我的应用程序是HTML5验证器。有时,它显然正在外部服务器上等待。但是,很难确定是单独地还是通过垃圾收集器对其进行CPU绑定。)