前端中转机,nginx出现socket() failed (24: Too many open files)...错误提示,客户端方面收到http状态码500的错误信息,查找网上方案,加以实际,得出以下方案。
出现此错误,表示系统打开文件数过多,超过系统配置参数。
使用命令查看:
ulimit -n
默认情况下为1024或者65535
配置可以的话,可以提高配置数值,升级到655350
1、修改/etc/security/limits.conf,修改或添加以下配置:root soft nofile 655350 root hard nofile 655350 * soft nofile 655350 * hard nofile 655350
保存修改后,退出当前shell,重新登录即可生效。
注意:ubuntu下需要注明root用户,即配置前两行必备,否则重新登录后无法生效。
重新登录后,可使用以下命令查看值:
ulimit -Hn ulimit -Sn
vi /etc/nginx/nginx.conf
加入以下配置,与worker_processes以及pid同级:
worker_rlimit_nofile 102400;
该配置项是指一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文 件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
配置成功后,重启nginx:
service nginx restart
完成以上步骤,即可解决nginx打开文件数过多的报错。