我将尝试列出一些我能想到的限制条件,但可能还有更多:
运行 apache 的网络服务器
看看使用的文件句柄的数量(如果 apache 提供静态内容,如 css、javascript 或图像)。
此外,http 连接的数量可能是一个约束(通常每个并发用户一个)。
另一个限制可能是将请求传递给 tomcat 的 ajp 工作线程数。
内存限制要求可能不是那么大,但这取决于您的 apache 的功能。
运行 Tomcat 的应用服务器
在这里,会话的大小将是一个约束。请注意,根据会话超时,并发会话的数量可能远高于并发用户的数量(并非所有人都需要执行并发请求,但会话仍然需要内存)。
此外,可用于服务执行的线程数将是一个约束。您的服务响应越快,被阻塞的线程就越少,因此需要的线程就越少。
运行 Redis、postgres 和 mongodb 的数据库服务器。
对于数据库,至少有两个约束条件:连接数(每个具有 db 访问权限的请求至少需要一个)和用于查询缓存的内存(内存越多,可以缓存的查询结果越多,从而使响应更快)。
总体
对于需要 5000 - 10000 个并发用户的系统,您可能需要研究集群和负载平衡。这将允许您根据需要进行调整(如果您的资源已用完,您可以添加另一个节点,如果从不需要大多数资源,您可以删除节点)并且具有更高可靠性的额外好处(如果一个节点关闭系统可能较慢,但仍会运行)。
为了分析您的系统,您可能需要并模拟许多并发访问并监控关键参数(文件句柄、内存使用、使用的线程、数据库连接、http 连接等)。从少量用户开始(例如 10),然后稳步增加(例如增加到 100,然后 1000 等)。当访问时间低于某个(自定义)限制时,找到瓶颈,提供更多资源并重试。最终,您会发现一些趋势(例如,每 500 个用户的累积会话大小为 1GB),这将使您能够粗略估计更高数量的并发用户。
要模拟并发用户,请查看Apache JMeter