【发布时间】:2018-09-22 12:02:00
【问题描述】:
为了进行模拟负载测试,我们在 Go gin-gonic 框架中设置了一个非常基本的 REST api,并使用以下代码并在大约 1000 多个请求出现错误后
http: Accept error: accept tcp [::]:8123: accept4: too many open 文件; 1s 后重试
func main() {
gin.SetMode(gin.DebugMode)
router := gin.Default()
router.GET("/dummyRequest", func(c *gin.Context) {
c.Data(http.StatusOK, "application/json; charset=utf-8", []byte(`{"name": "test", "age": 99}`))
})
router.Run(":8123")
}
基于here这个问题,我知道可以通过执行ulimit命令来解决这个问题,但这只会延迟问题。
当我执行netstat -tc 命令时,我看到新连接已建立,并且在处理请求后很长时间仍处于ESTABLISHED 状态。
正如预期的那样,当我按预期检查 /proc/$PID/limits 时,会看到以下条目:
Max open files 1024 4096 files
请帮助我尝试以正确的方式解决此问题的其他选项。
我正在使用 curl 请求发送请求以测试上述内容。
【问题讨论】:
-
将
ulimit -n增加到 10K-60K 范围是此类测试和在生产中运行的非常常规的设置。
标签: go