问题描述
初学 golang
,没太多接触编译型语言,不太了解其内存的回收机制,在并发测试 http server
时发现内存会随着测试的进行持续走高,待测试结束后该内存会一直占用不会减少。一个请求响应的周期结束后占用的内存不应被释放掉吗,还是说这里需要手动回收呢?我应该怎样去理解和解决呢?谢谢
环境
kubuntu 19.10
go 1.13.4
相关代码
package main
import (
"net/http"
)
func main() {
http.ListenAndServe(":8080", nil)
}
ulimit -n 65535
ab -n 100000 -c 10000 http://127.0.0.1:8080/
首先,这个编译型语言关系不大,很多具有垃圾回收的语言都会遇到这个问题
其次,既然 Golang 有垃圾回收,当然就不需要你手动回收了
最后,那为什么程序的内存不会降低呢?有几种可能:
解决方案:
所以结论是,你并不需要做什么,因为你并没有做错什么