Linux对打开文件数量的限制 ulimit
对于高并发或者频繁读写文件的应用而言,需求修改系统能够打开的文件句柄数,
否则会出现too many open files的错误。
而句柄数分为系统总限制和单进程限制。
可以使用ulimit -n
来查看系统对单个进程的限制,及open files。
或者执行ulimit -a
来查看所有的详细信息。
临时修改打开文件数目
1 | $ ulimit -HSn 65535 |
上面的命令将open files修改为65535,退出当前shell后即失效。
H和S分别表示硬限制和软限制
永久修改
如果希望永久修改,需要修改配置文件 /etc/security/limits.conf
,修改后需要重新启动系统。
1 | * soft nofile 65535 |
其中的*表示所有的用户,soft和hard分别表示软硬限制,nofile表示能够打开的最大文件数,第四列为具体的值。
其中具体的值有一个上次,在文件/proc/sys/fs/nr_open
,默认为1048576,完全够用了。
系统总打开句柄限制
上面讨论的均为单个线程的限制,属于线程级别的,系统级别的限制在文件/proc/sys/fs/file-max
文件中。
修改这个文件也是临时生效的,重启失效,如果希望永久生效,需要修改下面文件:/etc/sysctl.conf
可以添加下面这行
1 | fs.file-max = 6815744 |
然后运行sysctl -p
或者重启生效。
可以通过lsof -p PID
来查看单个进程打开的文件句柄