共计 2742 个字符,预计需要花费 7 分钟才能阅读完成。
当文件被关上拜访时,操作系统长期调配一个名为文件句柄的数字。主内存的一个非凡区域是为文件句柄预留的,这个区域的大小决定了一次能够关上多少个文件。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 |grep open
open files (-n) 1024
或者
[root@localhost ~]# ulimit -n
1024
如果须要查看硬限度,适应上面命令:
[root@localhost ~]# ulimit -Hn
4096
上面批改关上文件的数量:
[root@localhost ~]# ulimit -n 2048
而后来查看一下:
[root@localhost ~]# ulimit -Hn
2048
[root@localhost ~]# ulimit -Sn
2048
在 Linux 中批改关上文件数量限度的 3 种办法在 Linux 中批改关上文件数量限度的 3 种办法
发现,设置 ulimit 值的时候,没有指定 - H 或者 -S,两个限度都会设定雷同的值。
当初的问题是,如果退出登录或者重新启动计算机,该值将被重置。请记住,要使失效,须要编辑用户的.bashrc 或者.bash_profile 配置文件,通过将 ulimit 命令行增加到文件的开端,能够使参数失效。
[root@localhost ~]# echo “ulimit -n 2048” >> ~/.bashrc
在 Linux 中批改关上文件数量限度的 3 种办法在 Linux 中批改关上文件数量限度的 3 种办法
办法二:应用 PAM 模块
最好通过名为 pam_limits 的 PAM 模块实现这种限度。须要通过编辑 /etc/security/limits.conf 文件来配置它。这个文件蕴含四个根本字段:
domain: 形容了在哪些实体中利用限度。它能够是 user、group(组名后面加 @示意组)或匹配所有用户, 应用 (*) 通配符。通配符不适应与 root 用户。
type: 这里示意限度为硬限度还是软限度?硬限度是由系统管理员增加的,在任何状况下都不能超过,而用户能够长期超过软限度。还能够应用破折号 - 来示意一个限度是硬的和软的。请留神,软限度能够减少到硬限度的值
type: 它指定被限度条目标类型。能够是 core(限度外围文件大小(KB)),data(最大数据大小(KB)),fsize(最大文件大小(KB)),nofile(关上的文件描述符的最大数目),nproc(最大过程数),等类型。更多类型能够应用 man limits.conf 查看。
type: 这里使填写利用限度的数值。
上面实例能够对照理解一下。
[root@localhost ~]# tail -12 /etc/security/limits.conf
* 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
在 Linux 中批改关上文件数量限度的 3 种办法在 Linux 中批改关上文件数量限度的 3 种办法
要编辑所有用户关上文件的最大数量,能够在文件开端增加以下行:
[root@localhost ~]# vim /etc/security/limits.conf
- hard nofile 20000
- soft nofile 15000
在 Linux 中批改关上文件数量限度的 3 种办法在 Linux 中批改关上文件数量限度的 3 种办法
之后,须要编辑文件 /etc/pam.d/login 配置文件,在最初增加以下一条内容:
[root@localhost ~]# vim /etc/pam.d/login
session required pam_limits.so
在 Linux 中批改关上文件数量限度的 3 种办法在 Linux 中批改关上文件数量限度的 3 种办法
保留文件。而后退出登录,或者重启零碎。能够看到软限度和硬限度的值都批改胜利了:
[root@localhost ~]# ulimit -Sn
15000
[root@localhost ~]# ulimit -Hn
20000
办法三
查看零碎最大关上文件描述符数量:
[root@localhost ~]# cat /proc/sys/fs/file-max
180965
长期设置该值:
[root@localhost ~]# echo “1000000” > /proc/sys/fs/file-max
在 Linux 中批改关上文件数量限度的 3 种办法在 Linux 中批改关上文件数量限度的 3 种办法
永久性设置,须要在 /etc/sysctl.conf 中设置,并让它失效:
[root@localhost ~]# echo “fs.file-max = 1000000” >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
fs.file-max = 1000000
总结
所有过程关上的文件描述符数量不能超过 /proc/sys/fs/file-max。单个过程关上的文件描述符数不能超过 user limit 中 nofile 的 soft limit。nofile 的 soft limit 不能超过其 hard limit。