我有基于反向代理服务器。当我监控应用程序上的指标时(使用 prometheus),我注意到当应用程序上的负载增加时,应用程序上的线程(go_threads)从大约 20 到大约 55。然后在负载消失后,这些线程仍然存在,即使经过几个小时。但是我可以看到go_goroutines内存使用量下降,但线程没有。我有一些问题go中线程池的默认大小是多少?空闲线程会停留多长时间?
2 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
go中线程池的默认大小是多少?
空闲线程会停留多长时间?
注意:
代表 Go 代码在系统调用中可以阻塞的线程数没有限制;这些不计入 GOMAXPROCS 限制。
这意味着保持低线程数的最佳机会是减少阻塞系统调用。
长风秋雁
TA贡献1757条经验 获得超7个赞
对于您的第一个问题,我找不到线程池的默认大小,但是runtime/debug.SetMaxThreads的文档似乎表明,只要现有 OS 线程被阻塞,就会创建一个新线程。Go 运行时可能仅从单个 OS 线程开始并根据需要创建更多线程,但这可能会因 Go 的版本而异。
至于你的第二个问题,空闲的操作系统线程目前一直存在。有一个未解决的问题https://github.com/golang/go/issues/14592处理关闭空闲线程,但是截至最新的 Go 版本(1.14),几乎没有工作要做。
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报
0/150
提交
取消