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)的狀態。不知道是自己的操作姿勢不對還是源碼問題。