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
- descriptors connecting supported upstream maximumdescriptors connecting supported upstream descriptor operation permitted connect connecting upstream failed route upstream timed connection out parameters supports参数maximum connection actively upstream错误 descriptor descriptors descriptor device error read descriptor sqlgetdata microsoft operation