我正在学习设计可扩展系统,目前使用的是 Windows 机器。我创建了两个服务器,它们将监听端口 27016 和 27015,它们所做的就是返回“HelloWorld!”响应。在 Visual Studio 中创建这两个服务器时,我已为它们设置了 listen(ListenSocket, SOMAXCONN),如下所示温索克教程。使用 jmter 对它们每个单独执行负载测试(每秒 1000 个请求)并且一切正常。
现在,当我引入监听端口 80 的 nginx 并在上述两个服务器之间对请求(每秒 1000 个请求)进行负载平衡时,使用 jmeter 执行负载测试时许多请求都被丢弃。
我假设端口 80 的队列大小未针对高流量进行配置,并且想要对其进行调整。如何从 nginx 配置或 cmd 命令将队列大小设置为最大可能值?
答案1
以下是来自 Nginx 网站的信息:
worker_processes:NGINX 工作进程的数量(默认值为 1)。在大多数情况下,每个 CPU 核心运行一个工作进程效果很好,我们建议将此指令设置为 auto 以实现此目的。有时您可能需要增加此数字,例如当工作进程必须执行大量磁盘 I/O 时。
worker_connections:每个工作进程可以同时处理的最大连接数。默认值为 512,但大多数系统都有足够的资源来支持更大的连接数。适当的设置取决于服务器的大小和流量的性质,可以通过测试来发现。
因此,worker_processes 的最佳选择与您拥有的核心数相同。worker_connections 的值默认为 512。您可以根据需要以及系统可以处理的范围增加它。
以下内容也可能有帮助:
keepalive_requests:客户端可以通过单个保持连接发出的请求数。默认值为 100,但更高的值对于使用负载生成工具进行测试尤其有用,因为负载生成工具通常会从单个客户端发送大量请求。
keepalive_timeout:空闲保持连接保持打开的时间。以下指令与上游保持连接相关:
活着:每个工作进程保持打开状态的与上游服务器的空闲保持连接数。没有默认值。
我希望这会有所帮助!
注:我同意@Alexey Ten