更改Linux中的打开文件限制数量的方法

时间:2020-03-05 15:25:50  来源:igfitidea点击:

操作系统在打开以访问时,临时将名为文件句柄的号码分配给文件。
主内存的特殊区域是用于文件处理的特殊区域,此区域的大小确定可以立即打开的文件。
Linux上的进程受到许多约束的限制,这也阻止它们正确执行,并且每个进程都有几个与之相关的限制。
shell限制程序句柄的文件数,该程序可以同时打开。
在本文中,将介绍不同的方法,可以使用来更改Linux中的打开文件限制的数量。

为什么限制打开的文件的数量

由于操作系统需要内存来管理每个文件,因此我们可以面临可以打开的文件数的限制。
由于程序也可以关闭文件处理程序,它可以创建许多文件,直到所有可用的磁盘空间已满。
在这种情况下,安全性的一个方面通过施加限制来防止资源耗尽。

在Linux下,有两种限制:

  • 软限制是可以随时改变过程的值。
  • 硬限制标记通过设置软限制无法超出的最大值

我们可以在Linux系统上看到最大打开的文件描述符数,如下所示:

# cat /proc/sys/fs/file-max
100576

该值显示用户可以每次登录会话打开的文件数,但我们应该注意到结果可能因系统而不同。
由于某种原因,我们可能需要增加限制集的值。
这就是为什么Linux系统通过更改每个进程和每个系统的打开文件计数的最大值来修改这些限制的可能性(增加或者减少)。

1)ulimit命令

ulimit命令可用于增加可以在shell中打开的文件的数量。
此命令是Bash内置命令,因此它仅影响从中启动的Bash和程序。
ulimit语法如下:

ulimit [options [limit]]

选项定义了有限的内容。
我们可以看到以下选项如下

  • -a(当前设置通过):导致ulimit报告其当前设置。
  • -f(文件限制)限制了shell可以创建的文件的大小
  • -n限制了打开文件描述符的数量。
  • -h-s(硬和软限制)选项修改了其他选项,使它们分别设置为硬或者软限制。随后可能不会增加硬限制,但可能是软限制。如果任何选项都没有提供,则Ulimit设置了指定功能的硬度和软限制。

因此,要查看当前限制,可以如下所示:

$ulimit -a | grep open
open files (-n) 1024

我们可以检查以下硬限制:

$ulimit -Hn
4096

和下面的软限制:

$ulimit -Sn
1024

我们可以编辑以下限制

$ulimit -n 3000

我们可以在下面查看:

$ulimit -n 
3000

现在问题是,如果我们注销并登录或者重新启动计算机,则将重置值。
请记住,使这些限制更加永久性需要通过添加ulimit来编辑用户的配置文件(.bashrc或者'.proofile)或者系统wely配置文件(/etc/bashrc或者/etc/profile`)命令行到文件的末尾如下

# vim .bash_profile
ulimit -n 3000

现在即使我们重新启动,用户设置的限制也将是永久性的。
我们可以选择仅增加硬限制(-hn)或者软限制(-sn),但我们应该注意到任何用户都可以设置软限制,而硬限制只能通过root可变。

2)可插拔认证模块(PAM)模块

强加此类限制是通过名为PAM_LIMITS的可插拔认证模块(PAM)模块进行的最佳选择。
大多数主要的Linux发行版都使用此模块作为其标准PAM配置的一部分,因此它已存在于某些Linux系统上,但我们需要通过编辑"/etc/security/limits.conf"文件来配置它。
此文件包含由四个基本领域组成:

  • 域:它描述了限制适用的实体。它可以是用户名,组名称(具有表单@groupname)或者与每个人匹配的星号(*)通配符。但是,我们应该注意,通配符不适用于root用户
  • 类型:此字段指定硬或者软件的限制。系统管理员施加硬限制,在任何情况下都不能超过,而用户可能暂时超过软限制。我们还可以使用dash( - )表示限制既硬且软。请注意,软限度可能会增加到硬限制的值
  • 项目:指定有限类型的项目类型。这可以是nofile(开放数据文件的数量),fsize(由用户创建的文件大小),核心(核心文件的大小),等等
  • 值:指定要应用于限制的值

我们可以看到例如此文件的内容如下所示:

# tail -f -n 12 /etc/security/limits.conf 
#<domain>       <type>   <item>         <value>       
##*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4
# End of file

要编辑所有用户的最大打开文件数,可以添加例如添加到下面的行的末尾:

# vim /etc/security/limits.conf
*       hard    nofile  20000
*       soft    nofile  15000

在此之后,我们需要编辑文件/etc/pam.d/login

# vim /etc/pam.d/login
session required pam_limits.so

然后保存文件。
我们可以查看以下结果:

$ulimit -Hn
20000

3)系统宽限制

在Linux系统上,我们有文件 - 最大值是最大文件描述符(FD),ulimit和file-max的默认设置假设有几个用户将共享系统。
这就是为什么这些设置限制了每个用户使用的资源数量。
我们可以通过编辑"/etc/sysctl.conf"或者通过编辑指令"FS.FILE-MAX"来增加Linux中打开文件的限制

我们可以使用命令查看打开的文件的当前值

# cat /proc/sys/fs/file-max
100576

我们可以编辑以下默认值:

# sysctl -w fs.file-max=250000
fs.file-max = 250000

我们可以查看如下结果

# cat /proc/sys/fs/file-max
250000

通过使用sysctl命令,将应用修改,直到下一次重启。

要使配置持久性,可以直接编辑"/etc/sysctl.conf"文件如下所示:

# vim /etc/sysctl.conf
fs.file-max=250000

如果我们列出了/proc/sys/fs/file-max的内容,我们将看到更改不会直接生效。
现在我们需要直接使用sysctl命令的-p选项应用更改,如下所示:

# sysctl -p
fs.file-max = 250000