Nginx 报错 nginx accept() failed (24: Too many open files)

nginx 错误日志

nginx accept() failed (24: Too many open files)

原因是 Linux 设置了软硬文件句柄和打开文件的数目,你可以使用 ulimit 命令来查看这些限制。



什么是ulimit?

ulimit 描述符用于限制用户打开的文件数量,让单个用户不至于打开较多的文件,导致系统奔溃或者资源不足的情况。Linux中一切皆文件,所以文件的含义是很广的。unlimit 还可以限制所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。


ulimit 命令:

-a:显示目前资源限制的设定;

-c <core文件上限>:设定core文件的最大值,单位为区块;

-d <数据节区大小>:程序数据节区的最大值,单位为KB;

-f <文件大小>:shell所能建立的最大文件,单位为区块;

-H:设定资源的硬性限制,也就是管理员所设下的限制;

-m <内存大小>:指定可使用内存的上限,单位为KB;

-n <文件数目>:指定同一时间最多可开启的文件数(只对当前的shell有效,退出后失效);

-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;

-s <堆叠大小>:指定堆叠的上限,单位为KB;

-S:设定资源的弹性限制;

-t <CPU时间>:指定CPU使用时间的上限,单位为秒;

-u <程序数目>:用户最多可开启的程序数目;

-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。


使用命令

ulimit -a

core file size     (blocks, -c) 0
data seg size      (kbytes, -d) unlimited
scheduling priority       (-e) 0
file size        (blocks, -f) unlimited
pending signals         (-i) 3881
max locked memory    (kbytes, -l) 64
max memory size     (kbytes, -m) unlimited
open files           (-n) 1024
pipe size      (512 bytes, -p) 8
POSIX message queues   (bytes, -q) 819200
real-time priority       (-r) 0
stack size       (kbytes, -s) 8192
cpu time        (seconds, -t) unlimited
max user processes       (-u) 3881
virtual memory     (kbytes, -v) unlimited
file locks           (-x) unlimited



修改ulimit限制

修改/etc/security/limits.conf这个文件,在底部加入下面的配置:

* soft nofile 10240
* hard nofile 10240


*:代表全局

soft:代表软件

hard:代表硬件

nproc:是代表最大进程数

nofile:是代表最大文件打开数


修改完毕后,重启服务器后,执行命令:ulimit -n可以看到设置已经生效:


修改nginx的打开文件数限制

nginx.conf 中加入一行

worker_rlimit_nofile 10240;

worker_rlimit_nofile 这个参数的含义是:“为nginx工作进程改变打开最多文件描述符数目的限制。用来在不重启主进程的情况下增加限制。”


重载nginx配置:nginx -s reload


参考:

https://www.cnblogs.com/sxlfybb/archive/2011/09/15/2177983.html

https://www.jb51.cc/nginx/539183.html

修改时间 2021-05-03

真诚赞赏,手留余香
赞赏
随机推荐
javascript检测变量是否声明
macOS 文字转语音命令 say
You Don't Need jQuery
PHP下载文件,隐藏真实文件地址
Git 创建分支最佳实践
跟Github学习设计不符合 CRUD 情况的RESTful API
Workerman 实现 WebSocket IM 聊天系统【后端篇】
Windows Server 服务器防止远程桌面暴力破解
CentOS 7 安装 Google BBR  
CentOS 8 安装 MySQL 5.7 或 MySQL 8