最大可打开的文件数

平常开发项目的时候会遇到进程下打开的最大fd超过默认设置,导致用户不能正常使用服务。linux是基于文件系统的一个操作系统,操作系统最基本的单元就是进程。最大可打开的文件描述符分为系统级别的和进程级别的。

面向全系统的

虽然操作系统是基于文件系统的,但它对整个系统中所打开的最大fd数目也是有限制的,默认的系统最大的fd在/proc/sys/fs/file-max文件里,记住proc目录只是一个虚拟的,实际控制的值是在/etc/sysctl.conf里可通过以下方式修改:

1
2
vim /etc/sysctl.conf #fs.file-max=795165把这个放到文件最后
sysctl -w fs.file-max=795165

最后需要执行sysctl -p生效,再到cat /proc/sys/fs/file-max验证已经同步

<! – more –>

面向进程

我们知道linux系统是一个多用户多进程的多核操作系统,进程是属于具体某一个用户的,通过xshell等工具ulimit看到的东西是对这个用户的一些资源限制,默认的最大fd数是1024,这一般不能满足于我们的需求,所以需要我们手动修改
如果默认从终端(shell环境)启动的进程会继承这些参数,修改可以通过以下几种方式:

  • /etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc 等脚本初始化地方加入ulimit -n value

  • vim /etc/security/limits.conf 按里面的说明还以为是对用户所有打开的fd有限制,经过测试并不是,对资源的限制还是针对进程的,只是用户登录shell会读取这个默认的值

ulimit -n value value值不能超过硬链接数 ulimit -Hn可以查看硬链数,最好在/etc/security/limits.conf设置自己想要的值

参考