liunx中文件句柄有两个限制
一种是用户级的,一种是系统级的(也叫内核级)

Linux最大打开文件句柄数,即打开文件数最大限制,就是规定的单个进程能够打开的最大文件句柄数量(Socket连接也算在里面,默认大小1024)

系统级的最大限制:
cat /proc/sys/fs/file-max

用户级的最大限制
ulimit -n(默认是1024,向阿里云华为云这种云主机一般是65535)

查看某个进程的最大打开文件数和当前打开文件数
/proc/[pid]/limits 显示当前进程的资源限制
/proc/[pid]/fd 是一个目录,包含进程打开文件的情况
/proc/[pid]/task 查看某个进程的线程的详细信息

修改最大限制
用户级
用户级修改临时生效方法:(重启后失效)
ulimit -SHn 10000

ulimit 命令分软限制和硬限制,加-H就是硬限制,加-S就是软限制。默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或-S,就是两个参数一起改变。硬限制就是实际的限制,而软限制是警告限制,它只会给出警告

用户级修改永久有效方式:
vi /etc/security/limits.conf

修改配置文件/etc/security/limits.conf,加入:

soft nofile 65535
hard nofile 65535
echo “* soft nofile 65535” >> /etc/security/limits.conf
echo “* hard nofile 65535” >> /etc/security/limits.conf
表示所用的用户,但有的系统不认, 需要具体的用户名, 比如:
root soft nofile 65535
root hard nofile 65535
重新登录验证,或者reboot后验证。
系统级
其实上面的修改都是对一个进程打开的文件句柄数量的限制,我们还需要设置系统的总限制才可以。
假如,我们设置进程打开的文件句柄数是1024 ,但是系统总限制才500,所以所有进程最多能打开文件句柄数量500。从这里我们可以看出只设置进程的打开文件句柄的数量是不行的。所以需要修改系统的总限制才可以

系统级修改临时生效方式:
echo 655350 > /proc/sys/fs/file-max

系统级修改永久生效方式:
vi /etc/sysctl.conf
加入
#系统允许打开最大文件数
fs.file-max=655350
#进程允许打开最大文件数,这里注意nr_open要比nofile大,否则会出现登录不上
fs.nr_open=60000

sysctl -p
查看是否生效,如果不行,reboot即可。
参考链接:

3 Ways to Fix Too Many Open Files - SSLHOW

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐