当超过 2^21 时,Openfiles 限制自动减少,Ubuntu 16.04

当超过 2^21 时,Openfiles 限制自动减少,Ubuntu 16.04

在尝试设置nofile有关我的用户(当然具有sudo特权)的硬限制和软限制时,我注意到一种奇怪的行为。

我的整体系统限制是 2^22,即使将其设置为 2^23 后,我也尝试执行以下操作。

我成功地将软限制和硬限制完美地设置为 2^20,没有任何问题。 (这意味着在我使用它们进行采样后,ulimit -Sn,and -Hn我得到了我刚刚设置的值)。

当我将它们设置为 2^21 或更高时,在重新登录用户(为了应用更改)后,硬限制和软限制都分别减少到 4096 和 1024 。

我在网上找不到任何关于它的信息,我怀疑它与用于存储这些值的变量的类型有关(我个人预计它约为 2^32 甚至 2^33如果它们被定义为uint,但绝对不是这种情况)。

答案1

似乎有两个系统范围的限制,记录在文档/sysctl/fs.txt

  • fs.file-max是整个系统上打开的文件(文件句柄)的最大数量。
  • fs.nr_open是每个进程打开文件数的全局上限,它限制了 的值RLIMIT_NOFILE,这是所ulimit -n设置的。不出所料,默认值为 1024*1024,即 2^20。

所以:

# sysctl fs.nr_open
fs.nr_open = 1048576
# ulimit -Hn 1048577
-su: ulimit: open files: cannot modify limit: Operation not permitted
# sysctl fs.nr_open=$[ 2**22 ] 
fs.nr_open = 4194304
# ulimit -Hn 4000000            # now it can be set

file-max似乎并没有阻止设置每个进程的限制,我一直这样设置:

# sysctl fs.file-max
fs.file-max = 262144

因此,无论设置什么限制(pam_limits.so?),由于 sysctl 设置的限制,它可能会获取并忽略系统调用上的错误。或者它可能会在某处记录错误,请检查您的日志。

相关内容