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

问题描述 投票:0回答:1

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

或者请指出为了启动并运行这样的基础设施而应考虑的各种限制。我希望您指出

的要求
  1. 运行 apache 的网络服务器
  2. 运行 Tomcat 的应用程序服务器
  3. 运行 Redis、postgres 和 mongodb 的数据库服务器。
java spring tomcat processor
1个回答
5
投票

我会尝试列出一些我能想到的限制,但可能还有更多:

运行 apache 的网络服务器

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

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

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

内存限制要求可能不是那么大,但这取决于您的 apache 的用途。

运行 Tomcat 的应用程序服务器

这里会话的大小将成为一个限制。请注意,根据会话超时,并发会话数可能会远高于并发用户数(并非所有会话都需要并发请求,但会话仍然需要内存)。

此外,可用于服务执行的线程数量也是一个限制。您的服务响应速度越快,被阻塞的线程就越少,因此需要的线程就越少。

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

对于数据库来说,至少有两个约束:连接数(每个请求至少需要一个数据库访问)和查询缓存的内存(内存越多,可以缓存的查询结果越多,响应速度越快) .

整体

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.