如何知道所需的核心数和内存数?

时间:2013-08-19 15:38:39

标签: java spring tomcat core processor

我有一个在Apache Tomcat 7上运行的Spring应用程序,它完全提供基于REST的服务。我有大约100万人将在全球范围内使用它。我的问题是,是否有任何标准的方法来计算所需的处理器数量以及此类站点所需的RAM。由于我拥有最多的东西,但我想明智地订购产品。我正在认真寻找一个可以让我做这样估计的公式或其他东西。请指点我。

或者请指出我为了使这样的基础设施正常运行而应该考虑的各种限制因素。我希望你指出

的要求
  1. 运行apache的网络服务器
  2. 运行Tomcat的应用服务器
  3. 使用Redis,postgres和mongodb运行的数据库服务器。
  4. 非常感谢。

1 个答案:

答案 0 :(得分:3)

我会尝试列出一些我能想到的约束,但可能会有更多:

运行apache的网络服务器

查看使用的文件句柄数(如果apache提供静态内容,如css,javascript或图像)。

此外,http连接的数量可能是一个约束(通常每个并发用户一个)。

另一个约束可能是将请求传递给tomcat的ajp工作线程数。

内存限制要求可能不是那么大,但这取决于你的apache做什么。

运行Tomcat的

应用服务器

这里会话的大小是一个约束。请注意,根据会话超时,并发会话的数量可能远远高于并发用户的数量(并非所有用户都需要执行并发请求,但会话仍需要内存)。

此外,可用于服务执行的线程数将是一个约束。服务响应越快,阻塞的线程就越少,因此需要的线程就越少。

运行Redis,postgres和mongodb的数据库服务器。

对于数据库,至少有两个约束:连接数(每个请求具有db访问权限至少需要一个)和查询缓存的内存(内存越多,查询结果可能会被缓存,做出响应快)。

<强>总体

对于需要5000 - 10000个并发用户的系统,您可能需要查看群集和负载平衡。这将允许您在ondemand基础上进行调整(如果您的资源用完了,您可以添加另一个节点,如果从不需要大多数资源,您可以删除节点)并且还具有更高可靠性的额外好处(如果一个节点已关闭)系统可能会更慢,但它仍然会运行。)

为了对系统进行概要分析,您可能需要并模拟许多并发访问并监视关键参数(文件句柄,内存使用情况,使用的线程,数据库连接,http连接等)。从少量用户(例如10)开始,然后稳步增加(例如,增加到100,然后增加1000等)。当访问时间低于某个(自定义)限制时,找到瓶颈,提供更多资源并重试。最终你会发现一些趋势(例如,每500个用户累计会话大小为1GB),这样你就可以对更多的并发用户进行粗略估计。

要模拟并发用户,请查看Apache JMeter