我已经用Golang编写了REST API,并且正在使用Jmeter对我的API进行性能测试。 当我对300个或更多用户运行测试时,每个用户发送20个请求,每个请求之间的间隔为500毫秒,我得到以下错误:
http:接受错误:接受tcp [::]:8080:接受4:打开的文件过多;
我正在AWS EC2服务器中运行此Go应用程序。我正在8GB RAM机器上运行此应用程序。 以下是我已经尝试过的内容:
但是,这些方法都无法解决问题。任何帮助表示赞赏。 预先感谢。
答案 0 :(得分:0)
一个问题可能不是关闭打开的文件或释放资源。
例如:http请求中的body对象的类型为io.ReadCloser
这个close读取器具有close方法,您必须在过程完成后才能释放资源。
func UserHandler(w http.ResponseWriter, r *http.request) {
var user User
if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
//handle error
}
defer r.Body.Close()
// More Code
}
在 r.Body.Close() 上调用 defer 会导致方法返回其资源后释放相关资源值。
与此类似,有很多方法可以实现此接口,例如: * os.File,sql.DB,mgo.Session * 等。因此,您只需检查自己是否正确关闭资源。