nr_open
This denotes the maximum number of file-handles a process can allocate. Default value is 1024*1024 (1048576) which should be enough for most machines. Actual limit depends on RLIMIT_NOFILE resource limit.
- 如何设置
echo 2097152 > /proc/sys/fs/nr_open
sysctl -w fs.nr_open=2097152
ulimit
主要用来限制普通过shell启动的普通进程的最大文件描述符数量。
- 如何设置
ulimit -n 2097152
procd中的nofile
用来控制通过procd启动的进程的fd数量
- 如何设置
procd_set_param limits nofile="2097152 2097152"
优先级
nr_open >= ulimit = nofile
nr_open的默认值为1024*1024,因此如果想把ulimit或nofile提高到一个小于此值的新值时,不需要提高nr_open值;否则需要先提高nr_open的值。
疑问
在procd的源码中,有这样一段代码:
第179行,如果使用procd_set_param limits nofile="unlimited"
来扩大nofile,会使setrlimit方法的rlim参数变得很大,甚至突破nr_open的限制,导致nofile设置失败,回退到1024(soft) 4096(hard)的状态。不知道是自己的操作姿势不对还是源码问题。