要分析我的应用,我想知道有多少goroutine正在等待写入或从频道读取;我在reflect
package中找不到任何相关内容。
我当然可以保持一个明确的反击,但我希望golang运行时知道,所以我尽量避免重新发明轮子。
那么,有没有办法在不手动维护计数器的情况下做到这一点?
答案 0 :(得分:1)
要跟踪整体负载,您可能正在寻找runtime.NumGoroutine()
https://golang.org/pkg/runtime/#NumGoroutine
虽然它不完全是被阻止的Go例程的数量,但它应该非常接近并且不超过runtime.NumGoroutine() - GOMAXPROCS
对于跟踪每个频道的转化套路,您可以执行下一步操作:
http/pprof
获取有关当前配置文件和解析输出的信息 - 有关详细信息https://stackoverflow.com/a/38414527/1975086,请参阅此答案。或者也许您可以查看http/pprof
并了解它是如何获取信息的,这样您就可以通过打字方式在应用中获取信息。