背景
我有一个用Golang编写的网站抛出:
http: Accept error: accept tcp [::]:8080: accept4: too many open files; retrying in 1s
...
...
在CentOS(生产)上,然后不再接受任何连接。
使用ApacheBench
进行的压力测试也停留在我的测试机器上的第16500个请求附近(OSX,超时也没有这个错误)。
我决定在OSX上做一个小例子。
我从https://golang.org/doc/articles/wiki/
改编了以下代码package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
我跑了ab -n 100000 -c 100 -s 10 http://localhost:8080
,但它也停留在第16500号请求。
我已尝试将文件描述符限制ulimit
从ulimit -n 10000
提高到256到10000。事情没有改善。
我应该拨打close()
吗?