平常开发项目的时候会遇到进程下打开的最大fd超过默认设置,导致用户不能正常使用服务。linux
是基于文件系统的一个操作系统,操作系统最基本的单元就是进程。最大可打开的文件描述符分为系统级别的和进程级别的。
面向全系统的
虽然操作系统是基于文件系统的,但它对整个系统中所打开的最大fd数目也是有限制的,默认的系统最大的fd在/proc/sys/fs/file-max
文件里,记住proc
目录只是一个虚拟的,实际控制的值是在/etc/sysctl.conf
里可通过以下方式修改:
|
|
最后需要执行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
设置自己想要的值