HeLei Blog

Linux最大文件数限制

要知道,在linux的世界里,一切皆文件.因此要实现大的并发量的第一步,修改linux系统的文件标识符限制数,也就是文件打开数量的限制

内核级的总限制 fs.file-max

man proc 里有这么一段话
img01

  • 查看限制数

    1
    2
    chris@ubuntu:~/myspace/myblog$ sysctl fs.file-max
    fs.file-max = 3000000
  • 修改限制数

    1
    2
    3
    chris@ubuntu:~/myspace/myblog$ sudo sysctl -w fs.file-max=3000000
    [sudo] password for chris:
    fs.file-max = 3000000

需要永久生效则

1
echo "fs.file-max=3000000" >>/etc/sysctl.conf

  • 查看使用情况
    1
    2
    chris@ubuntu:~$ sysctl fs.file-nr
    fs.file-nr = 6816 0 3000000

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

用户级进程级的限制

查看资源硬限制数

1
2
chris@ubuntu:~$ ulimit -Hn
4096

查看资源软限制数

1
2
chris@ubuntu:~$ ulimit -Sn
1024
通过ulimit -Sn设置最大打开文件描述符数的soft limit,注意soft limit不能大于hard limit(ulimit -Hn可查看hard limit),另外ulimit -n默认查看的是soft limit,但是 ulimit -n 204800 则会同时设置soft limit和hard limit。对于非root用户只能设置比原来小的hard limit

若要使修改永久有效,则需要在/etc/security/limits.conf中进行设置,可添加如下两行。

1
2
3
4
5
6
@work hard nofile 6000000
@work soft nofile 4000000
@work soft core 4000000
@work hard core 4000000
@work hard nproc 6000000
@work soft nproc 4000000

以上设置需要注销之后重新登录才能生效:
设置nofile的hard limit还有一点要注意的就是hard limit不能大于/proc/sys/fs/nr_open,假如hard limit大于nr_open,注销后无法正常登录。可以修改nr_open的值: echo 2000000 > /proc/sys/fs/nr_open
坚持原创技术分享,您的支持将鼓励我继续创作!