经常数量的请求后去网/ http挂起

时间:2016-01-20 10:34:33

标签: web-services networking go

我使用Go net/http设置了一个非常简单的基本http服务器,如下所示:

package main

import (
  "net/http"
  "fmt"
)

func defaultHttpPing(w http.ResponseWriter, r *http.Request) {
  fmt.Fprint(w, "Pong")
}

func main() {
  http.HandleFunc("/ping", defaultHttpPing)
  http.ListenAndServe(":8080", nil)
}

我相信这是我可以写的最小的Go http服务器,它不应该有任何应用程序错误。不幸的是,当我使用ab在此服务器上进行压力测试时:

ab -n 100000 -c 100 http://localhost:8080/ping

此输出失败:

Benchmarking localhost (be patient)
Completed 10000 requests
apr_pollset_poll: The timeout specified has expired (70007)
Total of 16482 requests completed

我很惊讶,因为我以前的ab测试具有相同并发级别的请求数量较少,例如-n 10000 -c 100成功。我还尝试了更多-n 100000 -c 100次测试,并且始终以16K次成功请求失败。

我的服务器出了什么问题?我也认为Go net/http有一些奇怪的问题。也许,这只是一种处理内存泄漏的感觉。

其他环境信息:

操作系统:Mac OS,El Capitan 限制:

-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                524288

0 个答案:

没有答案