多少个 nginx 缓冲区才算太多?

问题描述 投票:0回答:2

阅读 nginx 文档,

proxy_buffer
命令有以下解释消息:

该指令设置缓冲区的数量和大小,其中 将读取从代理服务器获得的答案。默认情况下, 一个缓冲区的大小等于一页的大小。根据 平台是 4K 或 8K。

默认为八个 4k 或 8k 缓冲区。为什么

nginx
的作者选择八个而不是更高的数字?如果我添加更多缓冲区或更大的缓冲区大小,会出现什么问题?

nginx proxy buffer
2个回答
20
投票

nginx 旨在高效利用内存,其默认配置也很少占用内存。如果添加更多缓冲区,不会出现任何问题,但 nginx 会消耗更多 RAM。

八个缓冲区可能被选为最小有效计数,即二的平方。 4 个太少了,16 个就大于 nginx 的默认需求了。

“缓冲区太多”的答案取决于您的性能需求、内存可用性和请求并发性。保持的“良好”阈值是服务器必须将内存交换到磁盘的点。 “最好”的答案是:确保 nginx 永远不会写入磁盘所需的缓冲区尽可能少(检查错误日志以了解是否如此)。

以下是我在具有 32 GB RAM 的 Web 主机上用于大型 PHP-FPM 应用程序的 nginx 配置:

 client_body_buffer_size      2m;
 client_header_buffer_size    16k;
 large_client_header_buffers  8 8k;
 fastcgi_buffers              512 16k;
 fastcgi_buffer_size          512k;
 fastcgi_busy_buffers_size    512k;

这些配置是通过一些试验和错误以及增加网络上 nginx 配置指南的值来确定的。标头缓冲区仍然很小,因为 HTTP 标头往往是轻量级的。客户端和 fastcgi 缓冲区已增加,可以处理复杂的 HTML 页面和 XML API。


0
投票

OP问

为什么 nginx 的authors 选择 8,而不是更高的数字?如果我添加更多缓冲区或更大的缓冲区大小会出现什么问题?

这是 nginx 论坛的一位作者回答的

关于几个大缓冲区与许多小缓冲区的一些提示:

  • 使用更大的缓冲区可能会对 CPU 使用率有所帮助,但通常 没什么大不了的。
  • 如果回复不适合,使用更大的缓冲区意味着更少的磁盘搜索 进入内存并将缓冲到磁盘。
  • 另一方面,小缓冲区允许更好的粒度(并且 最后部分填充的缓冲区浪费的内存更少)。

由于存在不同的负载模式(以及不同的硬件) 很难推荐一些特定的设置,但是大约 提示应该允许您针对您的系统进行适当的调整。

一般来说,如果您正在寻找 nginx 开发人员的答案,您可能应该首先搜索论坛。

© www.soinside.com 2019 - 2024. All rights reserved.