我有基于反向代理服務(wù)器。當(dāng)我監(jiān)控應(yīng)用程序上的指標(biāo)時(使用 prometheus),我注意到當(dāng)應(yīng)用程序上的負載增加時,應(yīng)用程序上的線程(go_threads)從大約 20 到大約 55。然后在負載消失后,這些線程仍然存在,即使經(jīng)過幾個小時。但是我可以看到go_goroutines內(nèi)存使用量下降,但線程沒有。我有一些問題go中線程池的默認大小是多少?空閑線程會停留多長時間?
2 回答
慕標(biāo)5832272
TA貢獻1966條經(jīng)驗 獲得超4個贊
go中線程池的默認大小是多少?
空閑線程會停留多長時間?
注意:
代表 Go 代碼在系統(tǒng)調(diào)用中可以阻塞的線程數(shù)沒有限制;這些不計入 GOMAXPROCS 限制。
這意味著保持低線程數(shù)的最佳機會是減少阻塞系統(tǒng)調(diào)用。
長風(fēng)秋雁
TA貢獻1757條經(jīng)驗 獲得超7個贊
對于您的第一個問題,我找不到線程池的默認大小,但是runtime/debug.SetMaxThreads的文檔似乎表明,只要現(xiàn)有 OS 線程被阻塞,就會創(chuàng)建一個新線程。Go 運行時可能僅從單個 OS 線程開始并根據(jù)需要創(chuàng)建更多線程,但這可能會因 Go 的版本而異。
至于你的第二個問題,空閑的操作系統(tǒng)線程目前一直存在。有一個未解決的問題https://github.com/golang/go/issues/14592處理關(guān)閉空閑線程,但是截至最新的 Go 版本(1.14),幾乎沒有工作要做。
- 2 回答
- 0 關(guān)注
- 169 瀏覽
添加回答
舉報
0/150
提交
取消
