nginx访问报错“maximum number of descriptors supported by select() is 1024 while connecting to upstream”问题的处理

发布时间 2023-09-27 14:11:19作者: Zhai_David

1、问题背景

 

  • 项目:一个人力的系统,主要用于考勤打卡
  • 环境:windows server
  • nginx版本:1.22

 

问题说明:当早上访问人数增加的时候,就会出现nginx的异常

nginx的后台报错日志:

maximum number of descriptors supported by select() is 1024 while connecting to upstream

 

 

2、问题分析

经过排查发现,是nginx打开文件描述符,也就是打开文件个数的有1024个限制。

maximum number of descriptors 
 

那么,这个限制是在哪里设置的?是在安装nginx的时候,通过参数编译进去的。

 

查看nginx的编译时的参数,--with-cc-opt=-DFD_SETSIZE=1024

 

3、问题解决

 

通过尝试修改下面的三个参数:

worker_processes 2;
worker_rlimit_nofile 65535;
worker_connections  65535;

 

注意:尝试修改上面的参数,都是没哟解决问题的,早上大量的人来打开的情况下,访问人数增加的时候,还是会报错,后台还是有1024限制的报错。

 

正确的方法如下:

 

使用已经编译好的,修改过--with-cc-opt=-DFD_SETSIZE=1024参数的二进制程序。

 

 

1、通过nginx的官网,找到已经编译好的nginx

 

地址:http://nginx-win.ecsds.eu/download/

 

选择一个最新的版本进行下载:

 

2、将zip包上传到服务器上、解压

 

 

3、执行注册表程序

 

双击运行.reg程序就可以了

 

 

4、将nginx_basic.exe拷贝原nginx安装目录下

 

5、关闭原来的nginx进程

 

在nginx.exe目录中,shift + 右键,点击“在此处打开cmd”

登录到cmd中,执行nginx -s stop停止nginx程序.

 

6、备份原来的nginx.exe程序

 

将名字修改为nginx_bak.exe

 

7、将nginx_basic.exe修改名字为nginx.exe

 

8、启动nginx的服务

 

在nginx.exe目录中,shift + 右键,点击“在此处打开cmd”

登录到cmd中,执行start nginx

 

启动nginx程序.

 

这样就可以了,就完成了nginx程序的替换,最新的nginx.exe程序,使用的就是最新的参数进行编译的。

 

最新的nginx的文件描述符限制:--with-cc-opt=-DFD_SETSIZE=32768

 

就破除了1024这个文件描述符的限制。

新的nginx版本是:1.23.3.4