apache - 静态 Web 服务器的资源使用情况

标签 apache http nginx resources

我在一篇博文中遇到了这个问题。 Mozilla 在他们的实习面试中问到这个问题。 ( Blog Post )

You are running a HTTP server (nginx, Apache, etc) that is configured to serve static files off the local filesystem of your modern, multi-core server connected to a gigabit network. A handful of clients start requesting the same 4kb static file as fast as they can. What system resource do you think will be exhausted first?

a. CPU
b. Disk / I/O
c. Memory
d. Network
e. Other

在我看来,在使用 Nginx/Apache 的现代机器上,这一切都不会耗尽。网络服务器不会缓存这么小的文件并继续提供服务吗?此外,对于重复请求,它可以轻松发送 Not-Modified header 。

在 Apache 的情况下,我猜由于它通过生成线程处理多个客户端,CPU 将首先耗尽,但对于“少数”客户端,这无关紧要。

我想知道其他人对这个问题有何看法。

最佳答案

这真的取决于。 4k 是一种神奇的大小,可以与所有默认设置下的缓存和缓冲区一样好,因此可以轻松(快速)传递。内存不是这里的限制因素,因为网络服务器将在文件句柄上运行,而不是整个文件。在这种情况下,我会假设他们将其保存在内存中,但这将是每个工作实例一个文件,通常最多可以减少到 4kb * (num_cores + 1),这并不是一个真正的问题。

有人可能会争辩说内存或磁盘速度是一个问题。但是当像 这样的方法时,前一个可以忽略不计。正确配置,支持零拷贝方法。一旦文件的副本加载到内存中,后者将随着时间的推移而摊销。

最后是接口(interface)和 CPU。总的来说,CPU 时间往往比网络时间便宜很多,所以我预计 NIC 会在 CPU 之前成为瓶颈 - 如果有的话。

这个问题对于客户的位置有点不明确。如果他们连接到同一个 GbE 网络,他们确实有能力用他们的请求使您的 NIC 饱和。否则,某些中介可能成为限制因素。

现在让我们假设这些客户端在我们的网络中,并且我们这里有一个单宿主 10GbE NIC,通过 8 channel 连接(恕我直言,这是相当标准的):PCIe 3.0 x8 指定为 7,877 MB/s。 Core i7 3770具有 5GT/s 的总线速度,在 8 条车道上相当于大约 8 GB/s。假设没有其他 I/O 密集型工作负载,此 CPU 很容易使 NIC 饱和。

总而言之:网络/NIC 饱和先于 CPU 饱和。

关于apache - 静态 Web 服务器的资源使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000991/

相关文章:

redirect - NGINX 中的 IP 地址到域重定向

java - 在 Velocity 模板中调用宏函数

apache - 来自浏览器的过时加密警告

angular - 使用URL访问时出现 Angular 错误500

http - 大摇大摆的 WriteResponse

nginx - 意外 token < 使用 React Router 和 Nginx

linux - apache的虚拟机和mint linux安装

apache - Hadoop HUE 时间线图表显示为灰色

python - Google QPX Express API 返回 HTTP 错误 403 : Forbidden - Python

amazon-web-services - ELB 和 EC2 之间发生 408 请求超时错误