当文件被打开访问时,操作系统临时分配一个名为文件句柄的数字。主内存的一个特殊区域是为文件句柄预留的,这个区域的大小决定了一次可以打开多少个文件。
Linux上的进程受到许多限制,这些限制也阻碍它们正确地执行,而且每个进程都有几个与之相关的限制。shell限制程序可以同时打开的文件句柄的数量。
系统环境
Centos7
为什么要限制打开文件的数量?
因为操作系统需要内存来管理每个文件,所以可以打开的文件数可能会受到限制。由于程序也可以关闭文件处理程序,它可以创建任意大小的文件,直到所有可用磁盘空间都已满为止。在这种情况下,安全性的一个方面是通过施加限制来防止资源耗尽。
可以看到Linux系统中打开的文件描述符的最大数量,如下所示:
[root@localhost~]#cat/proc/sys/fs/file-max
180965
<以上代码可复制粘贴,可往左滑>
该值显示用户每次登录会话可以打开的文件数,你会注意到,结果可能会因系统而异。出于某些原因,可能需要增加限制集的值。这就是为什么Linux系统提供了修改这些限制的可能性(增加或减少),方法是更改每个进程和每个系统打开文件数的最大值。
方法一:使用ulimit命令
ulimit命令可用来增加在shell中打开文件的数量。这个命令是系统内置命令,因此它只影响bash和从它启动的程序。ulimit语法如下:
ulimit[选项][限制数值]
<以上代码可复制粘贴,可往左滑>
下面选项决定了什么是有限的:
- -a 显示当前所有限制的报告
- -f (文件限制)限制shell能创建文件的大小
- -n 限制打开的文件描述符的数量。
- -H和-S 它们分别被设置为硬限制和软限制。硬限制可能不会随之增加,但软限制可能会增加。如果没有提供任何选项,ulimit将同时设置硬限制和软限制。
查看当前打开文件的软限制,可以使用下面命令:
[root@localhost~]#ulimit-a|grepopen
openfiles(-n)1024
或者
[root@localhost~]#ulimit-n
1024
<以上代码可复制粘贴,可往左滑>
如果需要查看硬限制,适应下面命令:
[root@localhost~]#ulimit-Hn
4096
<以上代码可复制粘贴,可往左滑>
下面修改打开文件的数量:
[root@localhost~]#ulimit-n2048
<以上代码可复制粘贴,可往左滑>
然后来查看一下:
[root@localhost~]#ulimit-Hn
2048
[root@localhost~]#ulimit-Sn
2048
<以上代码可复制粘贴,可往左滑>