Linux文件描述符数的查看与配置

时间:2022-12-19 21:58:40

前戏

生产环境因系统文件打开数太小导致服务挂掉了

系统最大打开文件描述符数

查看

cat /proc/sys/fs/file-max

Linux文件描述符数的查看与配置

设置

临时配置

echo 100000000000000 > /proc/sys/fs/file-max

永久性配置

编辑/etc/sysctl.conf文件

fs.file-max = 100000000000000

进程最大打开文件描述符数

查看

 ulimit -n

Linux文件描述符数的查看与配置

设置

临时性:通过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

设置soft limit,必须小于hard limit:

ulimit -Sn 1600000

永久性:上面的方法只是临时性的,注销重新登录就失效了,而且不能增大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

查看当前系统使用的打开文件描述符数

查看

cat /proc/sys/fs/file-nr 

Linux文件描述符数的查看与配置

其中第一个数表示当前系统已分配使用的打开文件描述符数,第二个数为分配后已释放的(目前已不再使用),第三个数等于file-max。

敲黑板

  1. 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
  2. 单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
  3. nofile的soft limit不能超过其hard limit
  4. nofile的hard limit不能超过/proc/sys/fs/nr_open