我有一台 Linux/Debian 服务器,它配备了 Intel i7 CPU,有 4 核 8 线程。当我运行繁重的 Apache/PHP 作业时,它使用 1 个线程,而当我运行并发 Apache/PHP 作业时,它们各自使用自己的线程。
因此,如果我想为高流量做好准备,是否只需最大化核心数量(通过选择其他 CPU)以便能够处理更多并发作业,前提是它有足够的内存并且数据库/文件系统不会带来额外的挑战?
我曾尝试同时运行 8 到 10 个作业,它们使用了所有线程,而且 CPU 利用率几乎达到 100%(但运行正常),因此看起来该理论似乎并没有完全错误 - 但还有其他东西可以破坏这种线性思维吗?
或者,我可以使用具有多台服务器的负载平衡系统,但我想知道使用单台服务器可以达到多远。
PS. Apache/PHP 使用的是禁用了线程安全的 mod_php,因此它使用 Prefork MPM。我不确定我是否敢使用 Worker MPM,因为我不确定线程安全性...
PSS。另外,我并不一定寻求更好的性能,主要只是能够处理更高的流量/更多的并发作业。
答案1
从您描述的情况来看(100% CPU 利用率),您的应用程序似乎受到 CPU 限制。因此,添加更多 CPU 内核或迁移到内核更快的机器可能会提高性能。
许多云提供商仅向您收取每小时几美分的费用,以租用具有许多 CPU 内核和大量 RAM 的强大虚拟机。只需在 16 或 32 个内核上进行测试,即可了解您的性能如何随 CPU/内核数量而扩展。
是的,我建议在增加系统数量之前,首先增加系统中的核心数量。
答案2
总是存在一个可扩展性限制,并且它可能是系统的任何组件。
如果吞吐量呈线性增长,响应时间也不算太糟糕,那么 CPU 目前就不是限制因素。继续使用更多 CPU 进行测试。大胆设想一下,您可以从各种云中租用非常大的虚拟机。当虚拟机大于一个 CPU 插槽时,您可能会开始看到 NUMA 效应。
理想情况下,吞吐量会因为遇到其他瓶颈而停止增加,但也可能迅速下降。唯一的办法就是进行测试。
使用多个负载平衡后端存在不可扩展的原因,包括高可用性。