关于 Linux 最大文件句柄数量限制问题
关于 Linux 最大文件句柄数量的配置问题,到底最大文件数被什么限制?too many open files 错误到底需要怎么解决?
1、ulimit -n
ulimit -n 是设置当前 shell 的当前用户所有进程能打开的最大文件数量,但是一个用户可能会同时通过多个 shell 连接到系统,所以还有一个针对用户的限制,通过修改 /etc/security/limits.conf 实现,例如,往 limits.conf 输入以下内容:
root soft nofile 110001
root hard nofile 110002
soft nofile 表示软限制,hard nofile 表示硬限制,软限制要小于等于硬限制。上面两行语句表示,root 用户的软限制为 110001,硬限制为 110002,即表示 root 用户能打开的最大文件数量为 110001,不管它开启多少个 shell。
有人认为 ulimit -n,限制用户单个进程的文件最大打开数量,严格来说这个说法是错误的。ulimit -n 其实是限制当前 shell 以及该 shell 启动的进程的文件打开数量。因为在很多情况下,同一个 shell 环境里,虽然会有很多个进程,但是非常耗费文件句柄的进程并不多,所以通常情况下大家会觉得 ulimit -n 的值和当前系统中最耗费文件句柄的进程近乎相等,所以会给人一种 ulimit -n 限制单个进程的文件最大打开数量的错觉。
还有的人说 ulimit -n 只允许设置的越来越小,如下