当前位置: 首页 > 科技观察

3招教你修改Linux打开文件数限制

时间:2023-03-14 08:12:31 科技观察

当一个文件被打开访问时,操作系统会临时分配一个编号,称为文件句柄。主存中专门为文件句柄保留了一块区域,这块区域的大小决定了一次可以打开多少个文件。Linux上的进程受到许多限制,这些限制也阻止它们正确执行,并且每个进程都有几个与之相关的限制。shell限制一个程序可以同时打开的文件句柄数。为什么系统环境Centos7限制打开文件数?由于操作系统需要内存来管理每个文件,因此可以打开的文件数量可能会有限制。由于该程序还可以关闭文件处理程序,因此它可以创建任意大小的文件,直到所有可用磁盘空间都被填满。在这种情况下,安全性的一个方面是通过施加限制来防止资源耗尽。可以看到linux系统最大打开文件描述符数,如下:[root@localhost~]#cat/proc/sys/fs/file-max180965<以上代码可以复制粘贴,可以滑动向左>该值显示用户每次登录会话可以打开多少文件,您会注意到结果可能因系统而异。由于某些原因,可能需要增加限制集的值。这就是为什么Linux系统提供了通过更改每个进程和每个系统的最大打开文件数来修改这些限制(增加或减少)的可能性。方法一:使用ulimit命令ulimit命令可以用来增加shell中打开文件的数量。此命令是系统内置的,因此它只影响bash和从它启动的程序。ulimit语法如下:ulimit[option][limitvalue]<以上代码可复制粘贴,可向左滑动>以下选项决定限制什么:-a显示当前所有限制的报告-f(文件限制)限制shell性能create_file_size-n限制打开文件描述符的数量。-H和-S这些分别设置为硬限制和软限制。硬限制可能不会相应增加,但软限制可能会增加。如果没有给出选项,ulimit将同时设置硬限制和软限制。查看当前打开文件的软限制,可以使用如下命令:[root@localhost~]#ulimit-a|grepopenopenfiles(-n)1024或者[root@localhost~]#ulimit-n1024<以上代码可以复制粘贴,可以去左滑>如果需要查看硬限制,适配如下命令:[root@localhost~]#ulimit-Hn4096<以上代码可以复制粘贴,可以向左滑动>修改下面的打开文件数:[root@localhost~]#ulimit-n2048<以上代码可以复制粘贴,向左滑动即可>然后查看:[root@localhost~]#ulimit-Hn2048[root@localhost~]#ulimit-Sn2048<以上代码可以复制粘贴,可以向左滑动>发现设置ulimit值的时候,如果-H或者-S不是指定,两个限制将设置相同的值。现在的问题是,如果您注销或重新启动计算机,该值将被重置。请记住,要使其生效,需要编辑用户的.bashrc或.bash_profile配置文件,在文件末尾添加ulimit命令行即可使参数生效。[root@localhost~]#echo"ulimit-n2048">>~/.bashrc<以上代码可以复制粘贴,向左滑动即可>方法二:使用PAM模块最好实现这个通过名为pam_limits的PAM模块进行限制。它需要通过编辑/etc/security/limits.conf文件进行配置。该文件包含四个基本字段:域:描述限制适用于哪些实体。可以是用户、组(在组名前加@表示组)或者匹配所有用户,使用(*)通配符。通配符不适用于root用户。type:这意味着限制是硬限制还是软限制?硬限制是由系统管理员添加的,在任何情况下都不能超过,而软限制可以由用户暂时超过。您还可以使用破折号-来表示极限是硬的还是软的。请注意,软限制可以增加到硬限制的值类型:它指定受限条目的类型。可以是core(限制核心文件大小(KB))、data(最大数据大小(KB))、fsize(最大文件大小(KB))、nofile(最大打开文件描述符数)、nproc(最大进程数)等更多类型可以使用manlimits.conf查看。type:这里可以填写申请限制的值。可以对照下面的例子来理解。[root@localhost~]#tail-12/etc/security/limits.conf###*softcore0#*hardss10000#@studenthardnproc20#@facultysoftnproc20#@facultyhardnproc50#ftphardnproc0#@student-maxlogins4#Endofffile<以上代码即可复制粘贴,可以向左滑动>编辑所有用户的最大打开文件数,可以在文件末尾添加下面一行:[root@localhost~]#vim/etc/security/limits.conf*hardnofile20000*softnofile15000<以上代码可以复制粘贴,可以向左滑动>之后需要编辑文件/etc/pam.d/login配置文件,在end:[root@localhost~]#vim/etc/pam.d/loginsessionrequiredpam_limits.so<以上代码可复制粘贴,左滑>保存文件。然后注销,或者重启系统。可以看到软限制和硬限制的值修改成功:[root@localhost~]#ulimit-Sn15000[root@localhost~]#ulimit-Hn20000<以上代码可以复制粘贴,可以向左滑动>方法三:查看系统最大打开文件描述符数:[root@localhost~]#cat/proc/sys/fs/file-max180965<以上代码可以复制粘贴,可以向左滑动>暂时设置这个值:[root@localhost~]#echo"1000000">/proc/sys/fs/file-max<以上代码可以复制粘贴,可以滑动到左侧>永久设置需要在/etc/sysctl.conf中设置并使其生效:[root@localhost~]#echo"fs.file-max=1000000">>/etc/sysctl.conf[root@localhost~]#sysctl-pfs.file-max=1000000<以上代码可复制粘贴,可向左滑动>总结所有进程打开的文件描述符数不能超过/proc/sys/fs/最大文件单个进程打开的文件描述符数不能超过用户限制中nofile的软限制。nofile的软限制不能超过它的硬限制。