前端中转机,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
2、修改nginx配置,打开文件限制
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打开文件数过多的报错。