nginx访问报错“maximum number of descriptors supported by select() is 1024 while connecting to upstream”问题的处理
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