我会尝试列出一些我能想到的限制,但可能还有更多:
在运行Apache的Web服务器上,请查看使用的文件句柄数量(如果Apache提供静态内容,如CSS、JavaScript或图像)。
此外,HTTP连接的数量可能是一个限制(通常每个并发用户一个)。
另一个限制可能是将请求传递给Tomcat的ajp工作线程的数量。
内存约束要求可能不那么巨大,但这取决于您的Apache所做的工作。
在运行Tomcat的应用服务器上,会话大小将是一个限制。请注意,根据会话超时时间,同时进行的会话数可能比同时进行的用户数高得多(并非所有用户都需要进行并发请求,但会话仍需要内存)。
此外,可用于服务执行的线程数量也将是一个限制。您的服务响应越快,被阻塞的线程就越少,因此需要的线程也就越少。
在运行Redis、Postgres和MongoDB的数据库服务器上也是如此。
针对数据库至少有两个限制:连接数(每个请求至少需要一个数据库连接)和查询缓存的内存(内存越多,可以缓存更多的查询结果,使响应更快)。
总体
对于预计有 5000 - 10000 个并发用户的系统,您可能需要考虑集群和负载均衡。这将允许您根据需求进行调整(如果您的资源被用完,您可以添加另一个节点;如果大多数资源从未被使用,您可以删除节点),并且会有更高的可靠性(如果一个节点失效,系统可能会变慢,但仍然可以运行)。
为了分析您的系统,您可能需要模拟一些并发访问,并监视关键参数(文件句柄、内存使用、线程使用、数据库连接、HTTP 连接等)。从少量的用户(例如 10)开始,然后逐步增加(例如到 100,再到 1000 等)。当访问时间低于某个(自定义的)限制时,找到瓶颈,提供更多的资源,然后再试一次。最终,您将发现一些趋势(例如每 500 个用户累积会话大小为 1GB),这将允许您粗略估算更高数量的并发用户。
如果要模拟并发用户,请查看 Apache JMeter。