Debian 最大文件描述符

Debian 最大文件描述符

Debian Lenny。对于每个用户(包括 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

/*
 * init 任务的启动时间 rlimit 默认值:
 */
#定义 INIT_RLIMITS \
{ \
        ...
        [RLIMIT_NOFILE] = { INR_OPEN_CUR, INR_OPEN_MAX },\
        ...
}

参考文献INR_OPEN_CURINR_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/limitsDebian 上报告 1024 为软并且很硬nfile 限制?我不知道: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。

相关内容