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

u011511092 · · 3526 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近两天服务器总是会出现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是编译行语言,所以连接打开后,如果不手动关闭,会一直占用。。

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:u011511092

查看原文:go 服务器出现too many open files的错误

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3526 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传