可以使用下面的文件进行设置
/etc/security/limits.d/90-nproc.conf
先来看/etc/security/limits.d/90-nproc.conf 配置文件:
[root@ ~]# cat /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc 1024
root soft nproc unlimited
系统其它普通用户最多进程默认是1024个,而root用户是 unlimited(不受限制)
/etc/security/limits.conf 配置文件可限制文件打开数,系统进程等资源,在该文件配置中写的最大用户进程数是受/etc/security/limits.d/90-nproc.conf配置上限影响的。
一般系统普通用户进程数满了都是修改/etc/security/limits.d/90-nproc.conf文件。
为什么要限制打开文件的数量?
因为操作系统需要内存来管理每个文件,所以可以打开的文件数可能会受到限制。由于程序也可以关闭文件处理程序,它可以创建任意大小的文件,直到所有可用磁盘空间都已满为止。在这种情况下,安全性的一个方面是通过施加限制来防止资源耗尽。
最好通过名为pam_limits的PAM模块实现这种限制。需要通过编辑/etc/security/limits.conf文件来配置它。这个文件包含四个基本字段:
domain:描述了在哪些实体中应用限制。它可以是user、group(组名前面加@表示组)或匹配所有用户,使用(*)通配符。通配符不适应与root用户。
type:这里表示限制为硬限制还是软限制?硬限制是由系统管理员添加的,在任何情况下都不能超过,而用户可以临时超过软限制。还可以使用破折号-来表示一个限制是硬的和软的。请注意,软限制可以增加到硬限制的值
type:它指定被限制条目的类型。可以是core(限制核心文件大小(KB)),data(最大数据大小(KB)),fsize(最大文件大小(KB)),nofile(打开的文件描述符的最大数目),nproc(最大进程数),等类型。更多类型可以使用man limits.conf查看。
可以看到Linux系统中打开的文件描述符的最大数量,如下所示:
[root@localhost ~]# cat /proc/sys/fs/file-max
180965
一般我们也是可以修改 /etc/security/limits.conf 文件
[root@localhost ~]# vim /etc/security/limits.conf
* hard nofile 20000
* soft nofile 15000
之后,需要编辑文件/etc/pam.d/login配置文件,在最后添加以下一条内容:
[root@localhost ~]# vim /etc/pam.d/login session required pam_limits.so
保存文件。然后退出登录,或者重启系统。可以看到软限制和硬限制的值都修改成功了:
[root@localhost ~]# ulimit -Sn15000
[root@localhost ~]# ulimit -Hn
20000
方法三:
查看系统最大打开文件描述符数量:
[root@localhost ~]# cat /proc/sys/fs/file-max
180965
临时设置该值:
[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 -p
fs.file-max = 1000000
总结
所有进程打开的文件描述符数量不能超过/proc/sys/fs/file-max。
单个进程打开的文件描述符数不能超过user limit中nofile的soft limit。
nofile的soft limit不能超过其hard limit。
注意下面的提示:
修改/etc/security/limits.conf也可以达到目的,但是需要注意两个问题:
1.在配置文件中需要指明用户,如不指明,会有可能导致配置不生效(当两个配置文件都在生效时)。
2.书写有格式要求,* soft nproc 20480中间需要至少2个空格隔开。
注意:如果两个配置文件中都做了限制,以/etc/security/limits.d/90-nproc.conf中最小值为准