Apache 负载

Apache 负载

我计划在我的 Apache 服务器上运行聊天脚本,它每秒轮询一次以接收消息。我知道 Comet 等,但目前我不想使用它们。

我想知道是否有人可以告诉我它能够处理的并发用户大致数量?

服务器规格 Ubuntu 服务器,256MB RAM,四核

脚本基本上是一个简单的聊天脚本,它从 mysql db 读取是否有任何新消息,如果有,它就返回这些消息,否则就退出。

感谢您的时间。

答案1

由于您的 apache 服务器几乎可以在所有设备上运行,从诺基亚互联网平板电脑到满载的 Sun E25K,并且消息的获取可以是简单地从文件中读取行,也可以是执行昂贵的数据库查询,并且您的 apache 可以以几乎无限多种方式设置(mpm 方式);您应该:

  • 提供更多细节(并考虑到即使如此,大部分内容仍是猜测)
  • 自己运行基准测试。(仔细设计一个尽可能与现实生活相匹配的场景......)

虽然语气可能有些讽刺,但我确实坚信第二个建议是最好的,而且我绝对没有冒犯你的意思……

答案2

不,别人也不能,但我可以告诉你如何更清楚地思考这个问题。

从某种意义上说,您的 ApacheMaxClients设置就是您可以“处理”的并发用户数;您可能想要增加它,而问题在于您是否有足够的内存来运行那么多的 Apache 进程而不会产生交换(这当然取决于您的 Apache 进程在您的构建和配置下实际占用的内存有多大),以及您的机器及其执行的操作是否足够快,以至于内存甚至不是一个问题。

速度问题会影响轮询脚本的性能:如果运行时间为 0.01 秒,并且每个用户每秒点击一次,并且您有 4 个 CPU,那么理论上最多可能有 400 人执行任务而不会开始互相等待。(实际上,这个数字会少于这个数字,因为作业不是按照完美有序的顺序进入的,并行化并不完美,而且机器还有其他事情要做。)

但是,你知道,因为我们有这些优雅降级的系统,所以这个数字并不重要;关键是需要多少人才能让系统降级到“太多”以致于你的主观目的。如果有人访问你的轮询器,等待 0.1 秒才能恢复,这样可以吗?0.2 秒?3 秒?在某个时候,你会说“好吧,不,这个性能太差了”。你当时拥有的用户数量就是你的容量。

答案3

它基本上是可用内存的功能——您可以容纳多少个线程/进程?

在您的情况下,您确实需要测量这一点,并设置 MaxClients 以便您不会交换,否则游戏就结束了。

如果您每秒进行一次轮询,则需要决定是否使用 KeepAlive。

你真的需要读

答案4

补充 Chaos 上面关于 MaxClients 的说法。Apache 的硬编码上限为 255,但更改它需要重新编译。现在,重新编译 Apache 通常非常简单,但您可能需要阅读发行版使用的工具以简化未来的升级。

但实际上,如果你在一台服务器上访问 255 个子项,那么你就做错了。

相关内容