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有什么泄露的地方。