负载下降后,线程会粘在周围

我有基于反向代理服务器。当我监控应用程序上的指标时(使用 prometheus),我注意到当应用程序上的负载增加时,应用程序上的线程(go_threads)从大约 20 到大约 55。然后在负载消失后,这些线程仍然存在,即使经过几个小时。但是我可以看到go_goroutines内存使用量下降,但线程没有。

我有一些问题

  • go中线程池的默认大小是多少?

  • 空闲线程会停留多长时间?


梦里花落0921
浏览 131回答 2
2回答

慕标5832272

go中线程池的默认大小是多少?GOMAXPROCS空闲线程会停留多长时间?直到进程终止注意:代表 Go 代码在系统调用中可以阻塞的线程数没有限制;这些不计入 GOMAXPROCS 限制。这意味着保持低线程数的最佳机会是减少阻塞系统调用。

长风秋雁

对于您的第一个问题,我找不到线程池的默认大小,但是runtime/debug.SetMaxThreads的文档似乎表明,只要现有 OS 线程被阻塞,就会创建一个新线程。Go 运行时可能仅从单个 OS 线程开始并根据需要创建更多线程,但这可能会因 Go 的版本而异。至于你的第二个问题,空闲的操作系统线程目前一直存在。有一个未解决的问题https://github.com/golang/go/issues/14592处理关闭空闲线程,但是截至最新的 Go 版本(1.14),几乎没有工作要做。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go