我正在开发一个宁静的网服务的运行为servlet(使用blocking IO)在码头。找出最佳的设定最大的线似乎很难。

是否有一个研究式决定的最大数量的线从某些容易衡量的特点的其余部分设置?

有帮助吗?

解决方案

非常简单和原始之一:

max_number_of_threads=number_of_CPUs*C

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

问问自己如下问题:

  • 将你的应用程序CPU密集型低(C)或花费最多时间等待第三个系统(高C)?
  • 你需要更快的响应时间低(C)或是能够为许多用户在一次,即使每一个请求需要更长的时间(高C)。

通常我设C相当低的,例如2-10.

其他提示

没有,没有。保持你的螺纹数限制和控制下的所以你不得超过系统资源,Java的限制是通常在100-200个住的螺纹。

良好的方式来做到这一点是通过使用从遗嘱执行人 java。工具.并发.

我的理解是,当时这个问题,Servlet3.0不出来。但我想我应该记录,在这个问题的可能性的做异步处理在Servlet容器使用Servlet3.0.这可以帮助别人谁想过这个问题。不用说,有足够的资源用于Servlet3.0指出,主要servlet线现在不在压力下!码头有异步同的情况下不要使用Servlet3.0API,本身。

答案取决于最大数量的同时连接你的期望到处理。你应该让作为许多线连接你的期望。

andreasmk2是不正确的数线。我已经运行的应用程序1000线和没有问题的系统资源;当然,这取决于具体情况在你的系统。你会遇到一个 系统 限制,不 Java 限制。

我的问题是,我不知道如何形成一个合理的期望的数目同时连接。大概是在 一些 点它就是更好地拒绝新的连接比让一切都缓慢下降,因为有太多的请求,正在提供服务。

现实的工作负荷都很难模拟的,这就是为什么我在寻找一个公式已经研究过的其他人。

(明显的上限是最大堆大小划分的量最小的记忆需要服务的请求,但即使是难以衡量的环境中垃圾的收集器。)

谢谢。我读了这个作为没有任何简单的公式。:-(

(我的程序是一个HTML5验证程序。有时候它显然是在等待外部服务器。但是,它很难确定当它实际上是中央处理器-往对其自身或通过垃圾的收集器。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top