一、问题描述
某次,nginx重启报错: nginx: [warn] 4096 worker_connections exceed open file resource limit: 1024;如下所示:
二、处理
1)原因:nginx默认最大的并发数为1024,如果你设置worker_connecions这个值大于1024 ,会触发上述告警;
2)处理:我们需要打开nginx的最大文件打开数限制
这里,worker_rlimit_nofile 是nginx用于设置 worker 进程的最大文件打开数限制;它殖民了nginx的worker进程可以打开最大句柄描述符的个数,修改它可更改worker进程的最大打开文件数限制,如果没有设置的话,这个值为操作系统限制。这时nginx可以处理比Ulimit -a更多的文件,所以只需把这个值设置的高一些,nginx就不会有too many open files的问题了。实际,worker_rlimit_nofile限制能够打开多少静态资源或者连接的真正限制,worker_connections是nginx内部连接池的大小计算公式: 最大连接数 = worker_processes * worker_connections/4
。
修改配置文件,在"event"这行上面添加这一行:
worker_rlimit_nofile xxxxx; ####Specifies the value for maximum file descriptors that can be opened by this process.
经验值:
当worker_processes设置为1时
worker_rlimit_nofile = 9 + 2 * user_count
worker_connections = 2 + 2 * user_count
worker_processes设置为2时
worker_rlimit_nofile = 10 + 2 * user_count
worker_connections = 2 + 2 * user_count
当有3个worker process时,需要有三个STREAM类型的fd,最小的启动worker_rlimit_nofile是15
最小可以运行的:worker_rlimit_nofile = 7 + 2 * worker_proceses + 2 * user_count