先设置好linux 系统的 limit, 见其他博文

nginx 也有自己的 limit 设置:

1、 nginx.conf 设置  worker_rlimit_nofile 

       例如:  worker_rlimit_nofile 65535;

同时连接的数量受限于系统上可用的文件描述符的数量,因为每个套接字将打开一个文件描述符。 如果NGINX尝试打开比可用文件描述符更多的套接字,会发现error.log中出现Too many opened files的信息。
使用ulimit检查文件描述符的数量: ulimit -n       

现在,将此值增加到大于worker_processes * worker_connections的值。 应该是增加当前worker运行用户的最大文件打开数值。

NGINX提供了worker_rlimit_nofile指令,这是除了ulimit的一种设置可用的描述符的方式。 该指令与使用ulimit对用户的设置是同样的效果。此指令的值将覆盖ulimit的值

 

2、修改 nginx.service

# vim /usr/lib/systemd/system/nginx.service

增加 

[Service]
LimitNOFILE=65536

然后

systemctl daemon-reload
systemctl restart nginx

 

3、查看下当前实际的限制

ps -ef | grep nginx
cat /proc/<pid>/limit

 

4、ps, 如果开启的端口很多, 可能导致nginx 服务启动超时失败

可修改 nginx.service 

加入:

TimeoutStartSec=120

表示,允许服务启动使用 120s, 默认是 90s 

修改后  systemctl daemon-reload