对于运行 Web 服务器来说,拥有更多的 CPU 核心是否更好?

对于运行 Web 服务器来说,拥有更多的 CPU 核心是否更好?

我正在阅读有关如何将用户线程映射到内核线程的信息维基百科。从这篇文章中我了解到 FreeBSD 使用 1:1(内核级线程)。

因此,应用程序创建的每个用户线程都映射到内核线程。如果我假设我正在构建一个 Web 服务器,它将在一个线程中处理每个新请求,并且我在 FreeBSD 上运行,那么增加内核数量是否会提高应用程序的整体性能?

我已经阅读过这个问题CPU 核心:越多越好吗?但我希望答案的范围特别受到用户和内核线程之间 1:1 映射的影响。

答案1

简短的回答是肯定的。

长话短说,答案是……拥有更多 CPU 核心意味着拥有更强的处理能力。对于 PHP / Ruby / Python / 等 Web 应用程序,这意味着有更多资源来处理同时连接。对于负载繁重的应用程序,拥有更多核心确实会带来不同。

我个人的观点是,如果要在更高的处理能力和更大的 RAM 之间做出选择,我大多数情况下会选择更大的 RAM。有了 RAM,你可以减少磁盘 I/O 的瓶颈。

通过使用缓存系统,例如PHP 高级编程, 和MySQL 调优(表缓存、查询缓存等),您可以大大提高网站性能,而无需更多的 CPU 能力来生成内容。

如果您的网站可以缓存,请做出此选择。从长远来看,仅仅增加 CPU 核心数量是一个失败的选择。

答案2

是的。

现代 Web 服务器软件为连接到服务器的每台计算机使用单独的进程或线程。此外,MySQL 或 PHP 等后端软件也为其需要服务的每个用户在单独的进程或线程中运行,因此拥有更多核心总是有帮助的。

当然,在更密集的环境中,磁盘性能、内存或网络带宽最终可能会成为瓶颈。更多的内存允许更多的读取缓存,这将减少对慢速磁盘存储的访问。正如 Biapy 所建议的,如果您每秒处理大量请求,您应该研究专门的缓存软件,例如 Varnish,这将大大减少系统负载。

答案3

与往常一样,答案是视情况而定。

例如,nginx网络服务器表现非常好,尽管它不使用线程。它使用事件驱动架构。它可以并且确实使用多个工作进程,因此它可以利用多个核心。

正如您在链接的性能测量中看到的,如果并发连接数增加,线程式 apache web 服务器会产生更多线程并使用更多内存。nginx 使用的内存量保持相当稳定。在每秒处理的请求数量方面,nginx 远远胜过 apache。

所以线程并不总是最好的解决方案。

性能还取决于数据所在的位置。如果数据位于硬盘上,访问速度会比位于 RAM 中慢,而 RAM 又比处理器缓存慢得多。如果您想加快 Web 服务器的速度,可以考虑使用加速器,例如. 考虑阅读本文由 varnish 的主要作者撰写,介绍了 Web 服务的性能。这里的信息是,您应该使用操作系统的内置缓存机制,您不应该尝试自己做同样的工作。

相关内容