Linux打开文件数限制:报too many open files

一、说明
有的时候程序或者数据运行时会报too many open files,根本原因就是打开的文件超过了系统限制的数量。

二、查询
1、查询某个进程已经开启的文件句柄
lsof -p 进程pid | wc -l
查看所有进程各自打开的文件数
lsof -n|awk ‘{print $2}’|sort|uniq -c|sort -nr|more

2、查看当前操作系统已经打开的文件总量
cat /proc/sys/fs/file-nr
注:第一个值是已开启的,第二个值是分配但未使用,第三个值是总限制数

3、查看操作系统允许打开的文件总量限制
cat /proc/sys/fs/file-max

4、查看进程可以打开的文件数量限制
ulimit -a
注:open files指限制每个进程可以最大打开的文件数

三、设置文件开启数量限制
1、限制某个用户的
vim /etc/security/limits.conf
root soft nofile 65535
root hard nofile 65535
*soft nofile 65535
*hard nofile 65535
注:第一行指root用户的每个进程可开启最大的文件数(软限制,只警告)
第二行指root用户的每个进程可开启最大的文件数(硬限制,无法开启多的文件了)
第三、四行指所有用户的。
设定的值不能超过/proc/sys/fs/nr_open里的值,完全够用了。

>  "nofile"项有两个可能的限制措施。就是项下的hard和soft,要使修改过得最大打开文件数生效,必须对这两种限制进行设定。 如果使用"-"字符设定, 则hard和soft设定会同时被设定。

 

这是CentOS 6.X版本中 设置方式, 如果你是CentOS 7.X版本中, 此方式无效, 请看最下面设置

2、限制系统文件开启最大数
vim /etc/sysctl.conf
fs.file-max = 6815744
执行生效:sysctl -p

如果设置完以上不生效, 请继续看 运行网站出现Too many open files,CentOS 6.x和CentOS 7.x解决方法Linux面板 - 腾讯云开发者社区-腾讯云

四 CentOS 7.X的系统中

1>   在CentOS 7.X的系统中,使用Systemd替代了之前的SysV,因此 /etc/security/limits.conf 文件的配置作用域缩小了一些。limits.conf这里的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。登录用户的限制,与上面讲的一样,通过 /etc/security/limits.conf 来配置即可。

2>  对于systemd service的资源限制,如何配置呢

全局的配置,放在文件 /etc/systemd/system.conf 和 /etc/systemd/user.conf ,同时,也会加载两个对应的目录中的所有.conf文件/etc/systemd/system.conf.d/*.conf和/etc/systemd/user.conf.d/*.conf

其中,system.conf是系统实例使用的,user.conf用户实例使用的。一般的sevice,使用system.conf中的配置即可。systemd.conf.d/*.conf中配置会覆盖system.conf。

 

DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000

修改了system.conf后,需要重启系统才会生效。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值