Linux最大打开文件描述符数

Posted Jason Kwok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux最大打开文件描述符数相关的知识,希望对你有一定的参考价值。

1.    系统最大打开文件描述符数:/proc/sys/fs/file-max
a.    查看
$ cat /proc/sys/fs/file-max
186405
2. 设置
a.    临时性
# echo 1000000 > /proc/sys/fs/file-max
2.    永久性:在/etc/sysctl.conf中设置,在新建
fs.file-max = 1000000
 
2.    进程最大打开文件描述符数:user limit中nofile的soft limit
a.    查看
$ ulimit -n
1700000
2. 设置
a.    临时性:通过ulimit -Sn设置最大打开文件描述符数的soft limit,注意soft limit不能大于hard limit(ulimit -Hn可查看hard limit),另外ulimit -n默认查看的是soft limit,但是ulimit -n 1800000则是同时设置soft limit和hard limit。对于非root用户只能设置比原来小的hard limit。
查看hard limit:
$ ulimit -Hn
1700000
设置soft limit,必须小于hard limit:
$ ulimit -Sn 1600000
2.    永久性:上面的方法只是临时性的,注销重新登录就失效了,而且不能增大hard limit,只能在hard limit范围内修改soft limit。若要使修改永久有效,则需要在/etc/security/limits.conf中进行设置(需要root权限),可添加如下两行,表示用户chanon最大打开文件描述符数的soft limit为1800000,hard limit为2000000。以下设置需要注销之后重新登录才能生效:
chanon           soft    nofile          1800000
chanon           hard   nofile          2000000
设置nofile的hard limit还有一点要注意的就是hard limit不能大于/proc/sys/fs/nr_open,假如hard limit大于nr_open,注销后无法正常登录。可以修改nr_open的值:
# echo 2000000 > /proc/sys/fs/nr_open
 
3.    查看当前系统使用的打开文件描述符数
[[email protected] bin]# cat /proc/sys/fs/file-nr
5664        0        186405
其中第一个数表示当前系统已分配使用的打开文件描述符数,第二个数为分配后已释放的(目前已不再使用),第三个数等于file-max。
 
4.    总结:
a.    所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
b.    单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
c.    nofile的soft limit不能超过其hard limit
d.    nofile的hard limit不能超过/proc/sys/fs/nr_open

以上是关于Linux最大打开文件描述符数的主要内容,如果未能解决你的问题,请参考以下文章

Linux 开启最大文件描述符 调优

【fd】Linux文件描述符

linux fopen个数限制的问题(文件描述符限制)

Linux 进程级开启最大文件描述符 调优

MongoDB 最大连接数 设置失效的异常分析

linux调优