做者:bash
Greysocket
原文地址:rest
Githubcode
语雀blog
博客园进程
Too many open files是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通信连接(好比socket),正在监听的端口等等,因此有时候也能够叫作句柄(handle),这个错误一般也能够叫作句柄数超出系统限制。引发的缘由就是进程在某个时刻打开了超过系统限制的文件数量以及通信连接数。ip
经过命令ulimit -a能够查看当前系统设置的最大句柄数是多少get
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 31767 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) 31767 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
能够看到,open files的配置是1024,能够经过以下命令将open files增长博客
ulimit -n 65535
这种修改方式能够临时把文件打开数量增长到65535,可是系统重启后这个配置会失效。it
还有一种方式是修改系统的配置文件,以Ubuntu为例,配置文件默认在
/etc/security/limits.conf
在这个配置文件中增长
* soft nofile 65535 * hard nofile 65535
此外,若是用supervisor托管和启动项目,会遇到这个配置没法生效的问题,缘由在于supervisor会默认配置打开的句柄数量是1024,
若是要查看某个进程最大open files,能够经过这个进程的进程号对应的limits查看
cat /proc/进程号/limits
其中有一行是:
Max open files 1024 1024 bytes
supervisor托管的程序这一行默认都是supervisor配置的最大数量1024,这时须要手动改一下supervisor的配置文件,修改方式以下,以Ubuntu系统为例,找到supervisor的配置文件supervisord.conf
在[supervisord]选项中,增长minfds选项的配置
[supervisord] minfds=65535 ; min. avail startup file descriptors; default 1024
配置完毕后,须要重启supervisor(以systemctl为例)
systemctl restart supervisor
便可生效
在经过:
cat /proc/进程号/limits
查看下对应进程的可open files的数量
Max open files 65535 65535 bytes