加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

go 服务器出现too many open files的错误

发布时间:2020-12-16 18:56:52 所属栏目:大数据 来源:网络整理
导读:最近两天服务器总是会出现too many open files的错误。真的很是头疼。在本地开发环境中,也用了压力测试,发现问题不存在。但是为什么服务器会出现这种错误,有些闹不明白。本来想用ulimit更改一下打开文件的描述符。但这样子觉得并不解决问题。好吧,那就查
最近两天服务器总是会出现too many open files的错误。真的很是头疼。在本地开发环境中,也用了压力测试,发现问题不存在。但是为什么服务器会出现这种错误,有些闹不明白。本来想用ulimit更改一下打开文件的描述符。但这样子觉得并不解决问题。好吧,那就查一下更本的原因。 服务器是亚马逊,开发语言:golang,数据库:mongo,mysql。缓存:redis。 测试脚本:写了一个golang的并发请求脚本。大概同时请求100.ulimit限制到50.发现错误立刻呈现。发现在程序的进程下打开了大量的socket连接。所以当时就认为是mongo的连接错误。决定mongo的连接使用单例模式。不过后来发现,这些socket是会降下去的。也就是说,连接用完了,就关闭了。但是服务器的socket连接已经明显超过了ulimit的默认限制。项目也刚刚上线,也没有这么大的用户群。所以问题肯定不是处在了mongo的连接错误上。那是redis,mysql?后经过测试,也并不是这些连接的错误。 整的真是很晕啊。最后想起来了,可以看一下服务器的socket的连接是哪些请求。经过查看,发现是80端口。一个网站的。。搞了一天,方向错了。。。突然想起来了,最近添加的一个小功能,需要使用外网的api。在go打开连接后,好像没有关闭请求。加上关闭请求后,问题解决。socket上去,然后会自动下来。 总结:以后要及时关闭这些请求连接。go与php不一样。php在执行完成后,即使你不关闭请求,在解析完成后,所以变量,都会自动释放。go是编译行语言,所以连接打开后,如果不手动关闭,会一直占用。。

(编辑:李大同)

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

    推荐文章
      热点阅读