1 查看能打开的数量:    

        用户级限制:ulimit -n可以看到结果。

        系统级限制:cat /proc/sys/fs/file-max

2 临时修改最大数量:

        ulimit -n 2000 将最大值改为2000。

        需要注意的是普通用户首次使用该命令修改最大数量后再次使用ulimit -n只能越改越小,否则报错。假设用户还没使用ulimit -n:

#第一次可以设不大于/etc/security/limits.conf的任意大小
#如果/etc/security/limits.conf没有限制该用户的大小那么第一次可以设置成任意数量
ulimit -n 2000

#报错 bash: ulimit: open files: cannot modify limit: Operation not permitted
ulimit -n 2000

#可以设为更小的
ulimit -n 1998

#设完更小的值之后也改不回2000了
ulimit -n 2000
#报错bash: ulimit: open files: cannot modify limit: Operation not permitted

        root用户不受此限制,可以改大或改小。且root每次修改都可以比/etc/security/limits.conf里的内容大。后面内容会讲到修改/etc/security/limits.conf里的值

        此法修改大小仅对当前进程生效。重新登陆或另开进程就失效了。

3 永久修改文件描述符数量:

        vi /etc/security/limits.conf,如果有下面两行就修改数值,没有就添加下面两行:

root hard nofile 65536
root soft nofile 65536

        然后只需要重新登陆默认值就会刷新了,无需重启。 

        上述语句其实只加了root的,如果没有加用户的限制那么用户首次使用ulimit是可以打开任意数量的,可以比root的限制还要大。假定用户是user,向该文件加如下内容:

user hard nofile 2048
user soft nofile 2048

        此时user首次使用ulimit修改大小就不能比2048大了。可以理解为系统自动执行一次ulimit -n 2048,因此不能比上次修改的大。 

4 /proc/sys/fs/file-max系统级限制:

        虽然名字叫系统级限制,但是它无法限制最大文件描述符设置的值。这个值只是系统根据内存等资源信息计算出的一个建议值。我们查看以下这个值,我这边是1603892,如果在 /etc/security/limits.conf里进行如下修改:

root hard nofile 2000000
root soft nofile 2000000

        重新登陆后就可以发现可以变成200万。

5 误区总结:

        综上常见误区有以下几点:

        1.虽然普通用户ulimit -n设置只能越来越小,但是root用户不受限。

        2.普通用户如果没有在limits.conf配置最大值,虽然默认是1024,但是首次使用ulimit -n可以设置任意值,即便比root配置值还大。

        3.设置完limits.conf不用重启,重新登陆该用户就行。不过重启也可以。

        4./proc/sys/fs/file-max只是一个建议值,限制不了文件描述符最大数量

Logo

更多推荐