#file-nr 被系統使用的文件句柄數量 #inode-nr 已經使用的索引數量 #pty-nr 使用的pty數量 ####這里面的索引和文件句柄值不是ulimit -a查看到的值,而是sysctl.conf里面定義的和內核相關的值, max-file表示系統級別的能夠打開的文件句柄的數量, 而ulimit -n控制進程級別能夠打開的文件句柄的數量,可以使用sysctl -a | grep inode和sysctl -a | grep file查看,具體含義如下: file-max中指定了系統范圍內所有進程可打開的文件句柄的數量限制(系統級別, kernel-level)。 (The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate)。當收到"Too many open files in system"這樣的錯誤消息時, 就應該曾加這個值了。
# cat /proc/sys/fs/file-max 4096 # echo 100000 > /proc/sys/fs/file-max 或者 # echo ""fs.file-max=65535" >> /etc/sysctl.conf # sysctl -p file-nr 可以查看系統中當前打開的文件句柄的數量。 他里面包括3個數字: 第一個表示已經分配了的文件描述符數量, 第二個表示空閑的文件句柄數量, 第三個表示能夠打開文件句柄的最大值(跟file-max一致)。 內核會動態的分配文件句柄, 但是不會再次釋放他們(這個可能不適應最新的內核了, 在我的file-nr中看到第二列一直為0, 第一列有增有減) man bash, 找到說明ulimit的那一節:提供對shell及其啟動的進程的可用資源(包括文件句柄, 進程數量, core文件大小等)的控制。 這是進程級別的, 也就是說系統中某個session及其啟動的每個進程能打開多少個文件描述符, 能fork出多少個子進程等... 當達到上限時, 會報錯"Too many open files"或者遇上Socket/File: Can’t open so many files等