简单的golang HTTP服务器在请求数量之后就会卡住

时间:2016-01-06 15:15:39

标签: http go file-descriptor

背景

我有一个用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号请求。

我已尝试将文件描述符限制ulimitulimit -n 10000提高到256到10000。事情没有改善。

我应该拨打close()吗?

0 个答案:

没有答案