提问人:Hoa 提问时间:11/8/2023 最后编辑:Jonathan HallHoa 更新时间:11/8/2023 访问量:56
为什么限制打开的连接数会增加内存消耗?
Why does limiting number of open connections improve memory consumption?
问:
我正在比较文件上传 API 的 Go 和 Java 实现。API 将从多部分 POST 请求接收文件并将其写入本地目录。
对于 Go(缩写):
// In request handler...
file, fileHeader, _ := request.FormFile("file")
tempFile, _ := os.CreateTemp(path, filename+"*")
io.Copy(tempFile, request.File)
// then produce a message via messageQ
在另一台机器(“CLIENT”)上,我运行 JMeter 以向相应的 API 生成任意数量的请求(文件上传)。负载是并发线程数的增加 (8,16,32,...128),其中每个集合每个线程发出 10 个请求。
我在服务器上运行的 shell 脚本中使用如下命令来收集每个实现的使用情况统计信息。
top -pid $pid -stats "pid,cpu,mem,threads" | grep --line-buffered $pid > util.txt
Java 实现使用的内存比 Go 实现少得多,在戳了默认参数后,我尝试限制 Go 实现中的打开连接数,如下所示:
l = netutil.LimitListener(l, connectionCount)
对于介于 8 和 200 之间的所有值,我注意到内存使用量变得恒定,而不是随着请求数量的线性增加。connectionCount
我无法找到 Go 侦听器的并发连接数的默认值。我也无法找到我的 Java 实现(我正在使用 Spring Framework)的默认配置来尝试和模仿。
我的问题是:为什么限制打开的连接数量会改变 Go 中的内存消耗行为?
两者都是垃圾回收语言,但在内存消耗方面的表现却截然不同,我想知道为什么。
答: 暂无答案
评论