加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长资讯 > 评论 > 正文

看我如何处理 Too Many Open Files 错误!

发布时间:2021-04-12 13:10:05 所属栏目:评论 来源:互联网
导读:中支持高并发,或者是测试过比较多的并发连接。那么相信你一定遇到过Too many open files这个错误。 这个错误的出现其实是正常的,因为每打开一个文件(包括socket),都需要消耗一定的内存资源。为了避免个别进程不受控制地打开了过多的文件而让整个服务器崩

中支持高并发,或者是测试过比较多的并发连接。那么相信你一定遇到过“Too many open files”这个错误。

这个错误的出现其实是正常的,因为每打开一个文件(包括socket),都需要消耗一定的内存资源。为了避免个别进程不受控制地打开了过多的文件而让整个服务器崩溃,Linux 对打开的文件描述符数量有限制。

但是解决这个错误“奇葩”的地方在于,竟然需要修改三个参数:fs.nr_open、nofile(其实 nofile 还分 soft 和 hard) 和 fs.file-max。这几个参数里有的是进程级的、有的是系统级的、有的是用户进程级的,说一遍都觉得好乱。而且另外这几个参数还有依赖关系,着实比较复杂。

不知道你,反正飞哥我是根本记不住哪个是哪个。每次遇到这种问题,还是都得再继续 Google 一遍。但由于复杂性,所以其实网上的很多帖子里也都并没有真正搞清楚。如果照搜索出来的文章改,稍有不慎就会踩雷,把机器搞出问题。

我在测试最大TCP连接数的时候就踩过两次坑。

第一次是当时开了二十个子进程,每个子进程开启了五万个并发连接兴高采烈准备测试百万并发。结果倒霉催地忘了改 file-max 了。实验刚开始没多大一会儿就开始报错“Too many open files”。但问题是这个时候更悲催的是发现所有的命令包括 ps、kill也同时无法使用了。因为它们也都需要打开文件才能工作。后来没办法,重启系统解决的。

另外一次是重启机器完了之后发现无法 ssh 登录了。后来找运维工程部的同学报障以后才算是修复。最终发现是因为 hard nofile 比 fs.nr_open 高了,直接导致无法登陆。(其实我把 fs.nr_open 加大过,但是用的是 echo 命令 修改的。系统一重启,还原了)。

一、找到源代码

对于这三个家伙,我真的是无法言语更多了。所以我下定了决心,一定要把它们彻底搞清楚。怎么搞?那没有比把它的源码扒出来能看的更准确了。我们就拿创建 socket 来举例,首先找到 socket 系统调用的入口

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读