go的http服务报错"accept4: too many open files"


        执行命令"netstat -ano |grep 8300"后发现有很多"tcp6     210      0 127.0.0.1:8300          127.0.0.1:14677         CLOSE_WAIT  off (0.00/0/0)",

然后进入到服务的log目录下tail后发现一直打印"2018/05/25 14:57:49 http: Accept error: accept tcp [::]:8300: accept4: too many open files; retrying in 1s"。

关于CLOSE_WAIT搜到文章<一次服务端大量CLOSE_WAIT问题的解决>,详细描述了问题产生的原因,主要就是服务端响应客户端请求所打开的资源没有及时释放。

然后就关键字"accept4: too many open files; retrying in 1s"及"http: Accept error: accept tcp"搜索到文章<Go net/http 超时指导>、<go语言实现服务器接收http请求以及出现泄漏时的解决方案>,

其中后一篇文章指出了一种忘记关闭导致的资源泄露,结合前一篇文章给http服务设置超时,后面就不会出现大量CLOSE_WAIT了,文章<go语言 Accept error: accept tcp [::]:5551: too many open files;>

指出"在一个for循环之内,如果是直接http.post那么,这个http.post所使用的资源还没有释放,下一次的http.post请求已经开始,造成资源无法快速释放,最终抛出异常",但是暂时还没有看到

这个statChannel有什么泄露的地方。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM