德安·萊尼.對於每個用戶,包括 root:
# cat /proc/sys/fs/file-max
262144
# sysctl fs.file-max
fs.file-max = 262144
# ulimit -Hn
1024
# ulimit -Sn
1024
文件/etc/security/limits.conf
沒有未註解的行。
1024 從哪裡得到的?
答案1
這fs.file-max
系統控制顯示可以分配多少個文件句柄全系統,而ulimit
資源限制是針對每個進程(或每個 UID)的。前者描述於Documentation/sysctl/fs.txt:90
:
文件最大和文件編號: file-max中的值表示檔案的最大數量 Linux 核心將會指派的句柄。當你得到很多的時候 有關文件句柄用完的錯誤訊息,您可能 想要增加這個限制。
1024 個檔案的 rlimit 沒有在任何地方明確設定;它被硬編碼到內核中作為 pid 1 的預設值,位於include/asm-generic/resource.h:81
:
/* * 初始化任務的啟動時 rlimit 預設值: */ #define INIT_RLIMITS \ { \ … [RLIMIT_NOFILE] = { INR_OPEN_CUR, INR_OPEN_MAX }, \ … }
哪些參考文獻INR_OPEN_CUR
來自INR_OPEN_MAX
include/linux/fs.h:26
:
#define INR_OPEN_CUR 1024 /* nfile rlimits 的初始設定 */ #define INR_OPEN_MAX 4096 /* nfile rlimits 的硬限制 */
其他進程只是繼承限制init
(或 pid 1)。
為什麼/proc/1/limits
Debian 上報告 1024 都是軟的和硬n 文件限制?我不知道:sysvinit 原始碼和 Debian 核心補丁都沒有改變它。也許是 initramfs 腳本。 (我運行 Arch,預設值為 1024/4096。)
答案2
對於@grawity提出的問題,這個核心提交可以解釋:
提交 0ac1ee0bfec2a4ad118f907ce586d0dfd8db7641 作者:提姆‧加德納 日期:2011 年 5 月 24 日星期二 17:13:05 -0700 ulimit:將檔案數量的預設硬 ulimit 提高到 4096
至少在 RHEL5.4 中它是 1024/1024,在 RHEL6.2 中它是 1024/4096。