Linux http:Accept错误:Accept tcp[:]:8080:Accept 4:打开的文件太多;
我已经在Golang中编写了RESTAPI,并且正在使用Jmeter对我的API进行性能测试。 当我使用300个或更多用户运行测试时,每个用户发送20个请求,每个请求之间的间隔为500ms,我得到以下错误: http:Accept错误:Accept tcp[:]:8080:Accept 4:打开的文件太多 我正在AWS EC2服务器上运行这个Go应用程序。我正在8GB内存机器上运行此应用程序。 以下是我已经尝试过的:Linux http:Accept错误:Accept tcp[:]:8080:Accept 4:打开的文件太多;,linux,go,Linux,Go,我已经在Golang中编写了RESTAPI,并且正在使用Jmeter对我的API进行性能测试。 当我使用300个或更多用户运行测试时,每个用户发送20个请求,每个请求之间的间隔为500ms,我得到以下错误: http:Accept错误:Accept tcp[:]:8080:Accept 4:打开的文件太多 我正在AWS EC2服务器上运行这个Go应用程序。我正在8GB内存机器上运行此应用程序。 以下是我已经尝试过的: 我已将ulimit增加到一个足够好的数字。当我运行ulimit-n命令时,输出
提前感谢。一个问题可能是无法关闭打开的文件或释放资源
例如:http请求中的body对象的类型为io.ReadCloser 这个readcloser有一个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*等,因此您可以检查是否正确关闭了资源
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
}